home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 8 / Revista CD Expert nº 08 CD1.iso / Utilitarios / Programacao / MS-DOS Interrupt List / Inter60b / INTERRUP.F < prev    next >
Encoding:
Text File  |  1999-01-03  |  258.5 KB  |  7,236 lines

  1. Interrupt List, part 6 of 18
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999 Ralf Brown
  3. --------O-20---------------------------------
  4. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5.     AX = process ID of other process
  6.     BX -> message
  7.     CX = operation (1 send, 2 receive, 3 send&receive)
  8. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  9.       Tanenbaum
  10. Note:    the message contains the system call number (numbered as in V7
  11.       Unix(tm)) and the call parameters
  12. --------D-20---------------------------------
  13. INT 20 - DOS 1+ - TERMINATE PROGRAM
  14.     CS = PSP segment
  15. Return: never
  16. Notes:    (see INT 21/AH=00h)
  17.     this function sets the program's return code (ERRORLEVEL) to 00h
  18. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  19. --------G-20---------------------------------
  20. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  21.     ???
  22. Return: ???
  23. SeeAlso: INT 21"COMTROL"
  24. --------W-20----Vx0001-----------------------
  25. INT 20 P - Microsoft Windows - VMM - VxD SERVICES
  26.     VxD = 0001h
  27. Note:    the desired VxD and service number are identified by the data
  28.       immediately following the INT 20 instruction, as in:
  29.         INT    20h
  30.         DW    service number
  31.         DW    VxD identifier
  32. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  33.  
  34. (Table 01265)
  35. Values for VMM (VxD ID 0001h) service number:
  36.  0000h    get version
  37.  0001h    get current VM handle
  38.  0002h    test current VM handle
  39.  0003h    get system VM handle
  40.  0004h    test system VM handle
  41.  0005h    validate VM handle
  42.  0006h    get VMM reenter count
  43.  0007h    begin reentrant execution
  44.  0008h    end reentrant execution
  45.  0009h    install V86 breakpoint
  46.  000Ah    remove V86 breakpoint
  47.  000Bh    allocate V86 callback
  48.  000Ch    allocation PM callback
  49.  000Dh    call when VM returns
  50.  000Eh    schedule global event
  51.  000Fh    schedule VM event
  52.  0010h    call global event
  53.  0011h    call VM event
  54.  0012h    cancel global event
  55.  0013h    cancel VM event
  56.  0014h    call priority VM event
  57.  0015h    cancel priority VM event
  58.  0016h    get NMI handler address
  59.  0017h    set NMI handler address
  60.  0018h    hook NMI event
  61.  0019h    call when VM interrupts enabled
  62.  001Ah    enable VM interrupts
  63.  001Bh    disable VM interrupts
  64.  001Ch    map flat
  65.  001Dh    map linear to VM address
  66.  001Eh    adjust execution priority
  67.  001Fh    begin critical section
  68.  0020h    end critical section
  69.  0021h    end critical section and suspend
  70.  0022h    claim critical section
  71.  0023h    release critical section
  72.  0024h    call when not critical
  73.  0025h    create semaphore
  74.  0026h    destroy semaphore
  75.  0027h    wait on semaphore
  76.  0028h    signal semaphore
  77.  0029h    get critical section status
  78.  002Ah    call when task switched
  79.  002Bh    suspend VM
  80.  002Ch    resume VM
  81.  002Dh    no-fail resume VM
  82.  002Eh    nuke VM
  83.  002Fh    crash current VM
  84.  0030h    get execution focus
  85.  0031h    set execution focus
  86.  0032h    get time slice priority
  87.  0033h    set time slice priority
  88.  0034h    get time slice granularity
  89.  0035h    set time slice granularity
  90.  0036h    get time slice information
  91.  0037h    adjust execution time
  92.  0038h    release time slice
  93.  0039h    wake up VM
  94.  003Ah    call when idle
  95.  003Bh    get next VM handle
  96.  003Ch    set global timeout
  97.  003Dh    set VM timeout
  98.  003Eh    cancel timeout
  99.  003Fh    get system time
  100.     Return: EAX = time in milliseconds that Windows has been running
  101.  0040h    get VM execution time
  102.  0041h    hook V86 interrupt chain
  103.  0042h    get V86 interrupt vector
  104.  0043h    set V86 interrupt vector
  105.  0044h    get PM interrupt vector
  106.  0045h    set PM interrupt vector
  107.  0046h    simulate interrupt
  108.  0047h    simulate IRET
  109.  0048h    simulate far call
  110.  0049h    simulate far jump
  111.  004Ah    simulate far RET
  112.  004Bh    simulate far RET N
  113.  004Ch    build interrupt stack frame
  114.  004Dh    simulate push
  115.  004Eh    simulate pop
  116.  004Fh    _HeapAllocate
  117.  0050h    _HeapReAllocate
  118.  0051h    _HeapFree
  119.  0052h    _HeapGetSize
  120.  0053h    _PageAllocate
  121.  0054h    _PageReAllocate
  122.  0055h    _PageFree
  123.  0056h    _PageLock
  124.  0057h    _PageUnLock
  125.  0058h    _PageGetSizeAddr
  126.  0059h    _PageGetAllocInfo
  127.  005Ah    _GetFreePageCount
  128.  005Bh    _GetSysPageCount
  129.  005Ch    _GetVMPgCount
  130.  005Dh    _MapIntoV86
  131.  005Eh    _PhysIntoV86
  132.  005Fh    _TestGlobalV86Mem
  133.  0060h    _ModifyPageBits
  134.  0061h    copy page table
  135.  0062h    map linear into V86
  136.  0063h    linear page lock
  137.  0064h    linear page unlock
  138.  0065h    _SetResetV86Pageabl
  139.  0066h    _GetV86PageableArray
  140.  0067h    _PageCheckLinRange
  141.  0068h    page out dirty pages
  142.  0069h    discard pages
  143.  006Ah    _GetNulPageHandle
  144.  006Bh    get first V86 page
  145.  006Ch    map physical address to linear address
  146.  006Dh    _GetAppFlatDSAlias
  147.  006Eh    _SelectorMapFlat
  148.  006Fh    _GetDemandPageInfo
  149.  0070h    _GetSetPageOutCount
  150.  0071h    hook V86 page
  151.  0072h    assign device V86 pages
  152.  0073h    deassign device V86 pages
  153.  0074h    get array of V86 pages for device
  154.  0075h    _SetNULPageAddr
  155.  0076h    allocate GDT selector
  156.  0077h    free GDT selector
  157.  0078h    allocate LDT selector
  158.  0079h    free LDT selector
  159.  007Ah    _BuildDescriptorDWORDs
  160.  007Bh    get descriptor
  161.  007Ch    set descriptor
  162.  007Dh    toggle HMA
  163.  007Eh    get fault hook addresses
  164.  007Fh    hook V86 fault
  165.  0080h    hook PM fault
  166.  0081h    hook VMM fault
  167.  0082h    begin nested V86 execution
  168.  0083h    begin nested execution
  169.  0084h    execute V86-mode interrupt
  170.  0085h    resume execution
  171.  0086h    end nested execution
  172.  0087h    allocate PM application callback area
  173.  0088h    get current PM application callback area
  174.  0089h    set V86 execution mode
  175.  008Ah    set PM execution mode
  176.  008Bh    begin using locked PM stack
  177.  008Ch    end using locked PM stack
  178.  008Dh    save client state
  179.  008Eh    restore client state
  180.  008Fh    execute VxD interrupt
  181.     STACK:    WORD    interrupt number
  182.         other registers as required by interrupt call
  183.     Return:    registers as returned by interrupt call
  184.  0090h    hook device service
  185.     EAX = service ID (high word = VxD ID, low = service number)
  186.     ESI -> new handler
  187.  0091h    hook device V86 API
  188.  0092h    hook device PM API
  189.  0093h    system control (see also #02657)
  190.  0094h    simulate I/O
  191.  0095h    install multiple I/O handlers
  192.  0096h    install I/O handler
  193.     DX = I/O port address
  194.     ESI -> handler to call when I/O access attempted???
  195.  0097h    enable global trapping
  196.     DX = I/O port address
  197.  0098h    enable local trapping
  198.     DX = I/O port address
  199.  0099h    disable global trapping
  200.     DX = I/O port address
  201.  009Ah    disable local trapping
  202.     DX = I/O port address
  203.  009Bh    create list
  204.  009Ch    destroy list
  205.  009Dh    allocate list
  206.  009Eh    attach list
  207.  009Fh    attach list tail
  208.  00A0h    insert into list
  209.  00A1h    remove from list
  210.  00A2h    deallocate list
  211.  00A3h    get first item in list
  212.  00A4h    get next item in list
  213.  00A5h    remove first item in list
  214.  00A6h    add instance item
  215.  00A7h    allocate device callback area
  216.  00A8h    allocate global V86 data area
  217.  00A9h    allocate temporary V86 data area
  218.  00AAh    free temporary V86 data area
  219.  00ABh    get decimal integer from profile
  220.  00ACh    convert decimal string to integer
  221.  00ADh    get fixed-point number from profile
  222.  00AEh    convert fixed-point string
  223.  00AFh    get hex integer from profile
  224.  00B0h    convert hex string to integer
  225.  00B1h    get boolean value from profile
  226.  00B2h    convert boolean string
  227.  00B3h    get string from profile
  228.  00B4h    get next string from profile
  229.  00B5h    get environment string
  230.  00B6h    get exec path
  231.  00B7h    get configuration directory
  232.  00B8h    open file
  233.  00B9h    get PSP segment
  234.  00BAh    get DOS vectors
  235.  00BBh    get machine information
  236.  00BCh    get/set HMA information
  237.  00BDh    set system exit code
  238.  00BEh    fatal error handler
  239.  00BFh    fatal memory error
  240.  00C0h    update system clock
  241.  00C1h    test if debugger installed
  242.  00C2h    output debugger string
  243.  00C3h    output debugger character
  244.  00C4h    input debugger character
  245.  00C5h    debugger convert hex to binary
  246.  00C6h    debugger convert hex to decimal
  247.  00C7h    debugger test if valid handle
  248.  00C8h    validate client pointer
  249.  00C9h    test reentry
  250.  00CAh    queue debugger string
  251.  00CBh    log procedure call
  252.  00CCh    debugger test current VM
  253.  00CDh    get PM interrupt type
  254.  00CEh    set PM interrupt type
  255.  00CFh    get last updated system time
  256.  00D0h    get last updated VM execution time
  257.  00D1h    test if double-byte character-set lead byte
  258.  00D2h    _AddFreePhysPage
  259.  00D3h    _PageResetHandlePAddr
  260.  00D4h    _SetLastV86Page
  261.  00D5h    _GetLastV86Page
  262.  00D6h    _MapFreePhysReg
  263.  00D7h    _UnmapFreePhysReg
  264.  00D8h    _XchgFreePhysReg
  265.  00D9h    _SetFreePhysRegCalBk
  266.  00DAh    get next arena (MCB)
  267.  00DBh    get name of ugly TSR
  268.  00DCh    get debug options
  269.  00DDh    set physical HMA alias
  270.  00DEh    _GetGlblRng0V86IntBase
  271.  00DFh    add global V86 data area
  272.  00E0h    get/set detailed VM error
  273.  00E1h    Is_Debug_Chr
  274.  00E2h    clear monochrome screen
  275.  00E3h    output character to mono screen
  276.  00E4h    output string to mono screen
  277.  00E5h    set current position on mono screen
  278.  00E6h    get current position on mono screen
  279.  00E7h    get character from mono screen
  280.  00E8h    locate byte in ROM
  281.  00E9h    hook invalid page fault
  282.  00EAh    unhook invalid page fault
  283.  00EBh    set delete on exit file
  284.  00ECh    close VM
  285.  00EDh    "Enable_Touch_1st_Meg"
  286.  00EEh    "Disable_Touch_1st_Meg"
  287.  00EFh    install exception handler
  288.  00F0h    remove exception handler
  289.  00F1h    "Get_Crit_Status_No_Block"
  290.  00F2h    "_Schedule_VM_RTI_Event"
  291.  00F3h    "_Trace_Out_Service"
  292.  00F4h    "_Debug_Out_Service"
  293.  00F5h    "_Debug_Flags_Service"
  294.  00F6h    VMM add import module name
  295.  00F7h    VMM Add DDB
  296.  00F8h    VMM Remove DDB
  297.  00F9h    get thread time slice priority
  298.  00FAh    set thread time slice priority
  299.  00FBh    schedule thread event
  300.  00FCh    cancel thread event
  301.  00FDh    set thread timeout
  302.  00FEh    set asynchronous timeout
  303.  00FFh    "_AllocatreThreadDataSlot"
  304.  0100h    "_FreeThreadDataSlot"
  305.  0101h    create Mutex
  306.  0102h    destroy Mutex
  307.  0103h    get Mutex owner
  308.  0104h    call when thread switched
  309.  0105h    create thread
  310.  0106h    start thread
  311.  0107h    terminate thread
  312.  0108h    get current thread handle
  313.  0109h    test current thread handle
  314.  010Ah    "Get_Sys_Thread_Handle"
  315.  010Bh    "Test_Sys_Thread_Handle"
  316.  010Ch    "Validate_Thread_Handle"
  317.  010Dh    "Get_Initial_Thread_Handle"
  318.  010Eh    "Test_Initial_Thread_Handle"
  319.  010Fh    "Debug_Test_Valid_Thread_Handle"
  320.  0110h    "Debug_Test_Cur_Thread"
  321.  0111h    "VMM_GetSystemInitState"
  322.  0112h    "Cancel_Call_When_Thread_Switched"
  323.  0113h    "Get_Next_Thread_Handle"
  324.  0114h    "Adjust_Thread_Exec_Priority"
  325.  0115h    "_Deallocate_Device_CB_Area"
  326.  0116h    "Remove_IO_Handler"
  327.  0117h    "Remove_Mult_IO_Handlers"
  328.  0118h    unhook V86 interrupt chain
  329.  0119h    unhook V86 fault handler
  330.  011Ah    unhook PM fault handler
  331.  011Bh    unhook VMM fault handler
  332.  011Ch    unhook device service
  333.  011Dh    "_PageReserve"
  334.  011Eh    "_PageCommit"
  335.  011Fh    "_PageDecommit"
  336.  0120h    "_PagerRegister"
  337.  0121h    "_PagerQuery"
  338.  0122h    "_PagerDeregister"
  339.  0123h    "_ContextCreate"
  340.  0124h    "_ContextDestroy"
  341.  0125h    "_PageAttach"
  342.  0126h    "_PageFlush"
  343.  0127h    "_SignalID"
  344.  0128h    "_PageCommitPhys"
  345.  0129h    "_Register_Win32_Services"
  346.  012Ah    "Cancel_Call_When_Not_Critical"
  347.  012Bh    "Cancel_Call_When_Idle"
  348.  012Ch    "Cancel_Call_When_Task_Switched"
  349.  012Dh    "_Debug_Printf_Service"
  350.  012Eh    enter Mutex
  351.  012Fh    leave Mutex
  352.  0130h    simulate VM I/O
  353.  0131h    "Signal_Semaphore_No_Switch"
  354.  0132h    "_MMSwitchContext"
  355.  0133h    "_MMModifyPermissions"
  356.  0134h    "_MMQuery"
  357.  0135h    "_EnterMustComplete"
  358.  0136h    "_LeaveMustComplete"
  359.  0137h    "_ResumeExecMustComplete"
  360.  0138h    get thread termination status
  361.  0139h    "_GetInstanceInfo"
  362.  013Ah    "_ExecIntMustComplete"
  363.  013Bh    "_ExecVxDIntMustComplete"
  364.  013Ch    begin V86 serialization
  365.  013Dh    unhook V86 page
  366.  013Eh    "VMM_GetVxDLocationList"
  367.  013Fh    "VMM_GetDDBList" get start of VxD chain
  368.     (see also #02657 at INT 2F/AX=1684h/BX=0017h)
  369.  0140h    unhook NMI event
  370.  0141h    "Get_Instanced_V86_Int_Vector"
  371.  0142h    get or set real DOS PSP
  372.  0143h    call priority thread event
  373.  0144h    "Get_System_Time_Address"
  374.  0145h    "Get_Crit_Status_Thread"
  375.  0146h    "Get_DDB"
  376.  0147h    "Directed_Sys_Control"
  377.  0148h    "_RegOpenKey"
  378.  0149h    "_RegCloseKey"
  379.  014Ah    "_RegCreateKey"
  380.  014Bh    "_RegDeleteKey"
  381.  014Ch    "_RegEnumKey"
  382.  014Dh    "_RegQueryValue"
  383.  014Eh    "_RegSetValue"
  384.  014Fh    "_RegDeleteValue"
  385.  0150h    "_RegEnumValue"
  386.  0151h    "_RegQueryValueEx"
  387.  0152h    "_RegSetValueEx"
  388.  0153h    "_CallRing3"
  389.  0154h    "Exec_PM_Int"
  390.  0155h    "_RegFlushKey"
  391.  0156h    "_PageCommitContig"
  392.  0157h    "_GetCurrentContext"
  393.  0158h    "_LocalizeSprintf"
  394.  0159h    "_LocalizeStackSprintf"
  395.  015Ah    "Call_Restricted_Event"
  396.  015Bh    "Cancel_Restricted_Event"
  397.  015Ch    "Register_PEF_Provider"
  398.  015Dh    "_GetPhysPageInfo"
  399.  015Eh    "_RegQueryInfoKey"
  400.  015Fh    "MemArb_Reserve_Pages"
  401.  0160h    "Time_Slice_Sys_VM_Idle"
  402.  0161h    "Time_Slice_Sleep"
  403.  0162h    "Boost_With_Decay"
  404.  0163h    "Set_Inversion_Pri"
  405.  0164h    "Reset_Inversion_Pri"
  406.  0165h    "Release_Inversion_Pri"
  407.  0166h    "Get_Thread_Win32_Pri"
  408.  0167h    "Set_Thread_Win32_Pri"
  409.  0168h    "Set_Thread_Static_Boost"
  410.  0169h    "Set_VM_Static_Boost"
  411.  016Ah    "Release_Inversion_Pri_ID"
  412.  016Bh    "Attach_Thread_To_Group"
  413.  016Ch    "Detach_Thread_From_Group"
  414.  016Dh    "Set_Group_Static_Boost"
  415.  016Eh    "_GetRegistryPath"
  416.  016Fh    "_GetRegistryKey"
  417.  0170h    "_CleanupNestedExec"
  418.  0171h    "_RegRemapPreDefKey"
  419.  0172h    "End_V86_Serialization"
  420.  0173h    "_Assert_Range"
  421.  0174h    "_Sprintf"
  422.  0175h    "_PageChangePager"
  423.  0176h    "_RegCreateDynKey"
  424.  0177h    "RegQMulti"
  425.  0178h    "Boost_Thread_With_VM"
  426.  0179h    "Get_Boot_Flags"
  427.  017Ah    "Set_Boot_Flags"
  428.  017Bh    "_lstrcpyn"
  429.  017Ch    "_lstrlen"
  430.  017Dh    "_lmemcpy"
  431.  017Eh    "_GetVxDName"
  432.  017Fh    "Force_Mutexes_Free"
  433.  0180h    "Restore_Forced_Mutexes"
  434.  0181h    "_AddReclaimableItem"
  435.  0182h    "_SetReclaimableItem"
  436.  0183h    "_EnumReclaimableItem"
  437.  0184h    "Time_Slice_Wake_Sys_VM"
  438.  0185h    "VMM_Replace_Global_Environment"
  439.  0186h    "Begin_Non_Serial_Nest_V86_Exec"
  440.  0187h    "Get_Nest_Exec_Status"
  441.  0188h    "Open_Boot_Log"
  442.  0189h    "Write_Boot_Log"
  443.  018Ah    "Close_Boot_Log"
  444.  018Bh    "EnableDisable_Boot_Log"
  445.  018Ch    "_Call_On_My_Stack"
  446.  018Dh    "Get_Inst_V86_Int_Vec_Base"
  447.  018Eh    "_lstrcmpi"
  448.  018Fh    "_strupr"
  449.  0190h    "Log_Fault_Call_Out"
  450.  0191h    "_AtEventTime"
  451.  0191h    ...last service for Windows95 SP1
  452.  811Ch    unhook device service??? (called by KEYREMAP.VXD)
  453.     EAX = service ID (high word = VxD ID, low = service number)
  454.     ESI -> handler
  455. SeeAlso: #01266,#01267,INT 2F/AX=1684h/BX=0001h
  456. --------W-20----Vx0002-----------------------
  457. INT 20 P - Microsoft Windows - DEBUG - VxD SERVICES
  458.     VxD = 0002h
  459. Note:    the desired VxD and service number are identified by the data
  460.       immediately following the INT 20 instruction, as in:
  461.         INT    20h
  462.         DW    service number
  463.         DW    VxD identifier
  464. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01266,#01340
  465.  
  466. (Table 01266)
  467. Values for DEBUG (VxD ID 0002h) service number:
  468.  0000h    get version
  469.  0001h    "DEBUG_Fault"
  470.  0002h    "DEBUG_CheckFault"
  471.  0003h    "_DEBUG_LoadSyms"
  472. SeeAlso: #01265,#01267
  473. --------W-20----Vx0003-----------------------
  474. INT 20 P - Microsoft Windows - VPICD - VxD SERVICES
  475.     VxD = 0003h
  476. Note:    the desired VxD and service number are identified by the data
  477.       immediately following the INT 20 instruction, as in:
  478.         INT    20h
  479.         DW    service number
  480.         DW    VxD identifier
  481. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01267,#01340
  482.  
  483. (Table 01267)
  484. Values for VPICD (VxD ID 0003h) service number:
  485.  0000h    get version
  486.  0001h    virtualize IRQ
  487.  0002h    set interrupt request
  488.  0003h    clear interrupt request
  489.  0004h    physical EOI
  490.  0005h    get complete status
  491.  0006h    get status
  492.  0007h    test physical request
  493.  0008h    physically mask
  494.  0009h    physically unmask
  495.  000Ah    set automatic masking
  496.  000Bh    get IRQ complete status
  497.  000Ch    convert handle to IRQ
  498.  000Dh    convert IRQ to interrupt
  499.  000Eh    convert interrupt to IRQ
  500.  000Fh    call on hardware interrupt
  501.  0010h    force default owner
  502.  0011h    force default behavior
  503.  0012h    "VPICD_Auto_Mask_At_Inst_Swap"
  504.  0013h    "VPICD_Begin_Inst_Page_Swap"
  505.  0014h    "VPICD_End_Inst_Page_Swap"
  506.  0015h    "VPICD_Virtual_EOI"
  507.  0016h    "VPICD_Get_Virtualization_Count"
  508.  0017h    "VPICD_Post_Sys_Critical_Init"
  509.  0018h    "VPICD_VM_SlavePIC_Mask_Change"
  510. SeeAlso: #01265,#01268,INT 2F/AX=1684h/BX=0003h
  511. --------W-20----Vx0004-----------------------
  512. INT 20 P - Microsoft Windows - VDMAD - VxD SERVICES
  513.     VxD = 0004h
  514. Note:    the desired VxD and service number are identified by the data
  515.       immediately following the INT 20 instruction, as in:
  516.         INT    20h
  517.         DW    service number
  518.         DW    VxD identifier
  519. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  520.  
  521. (Table 01268)
  522. Values for VDMAD (VxD ID 0004h) service number:
  523.  0000h    get version
  524.  0001h    virtualize channel
  525.  0002h    get region information
  526.  0003h    set region information
  527.  0004h    get virtual state
  528.  0005h    set virtual state
  529.  0006h    set physical state
  530.  0007h    mask channel
  531.  0008h    unmask channel
  532.  0009h    lock DMA region
  533.  000Ah    unlock DMA region
  534.  000Bh    scatter lock
  535.  000Ch    scatter unlock
  536.  000Dh    reserve buffer space
  537.  000Eh    request buffer
  538.  000Fh    release buffer
  539.  0010h    copy to buffer
  540.  0011h    copy from buffer
  541.  0012h    default handler
  542.  0013h    disable translation
  543.  0014h    enable translation
  544.  0015h    get EISA address mode
  545.  0016h    set EISA address mode
  546.  0017h    unlock DMA region (ND)
  547.  0018h    "VDMAD_Phys_Mask_Channel"
  548.  0019h    "VDMAD_Phys_Unmask_Channel"
  549.  001Ah    "VDMAD_Unvirtualize_Channel"
  550.  001Bh    "VDMAD_Set_IO_Address"
  551.  001Ch    "VDMAD_Get_Phys_Count"
  552.  001Dh    "VDMAD_Get_Phys_Status"
  553.  001Eh    "VDMAD_Get_Max_Phys_Page"
  554.  001Fh    "VDMAD_Set_Channel_Callbacks"
  555.  0020h    "VDMAD_Get_Virt_Count"
  556.  0021h    "VDMAD_Set_Virt_Count"
  557.  0021h    ...last service for Windows95 SP1
  558. SeeAlso: #01267,#02646,#02683 at INT 2F/AX=1684h/BX=0444h
  559. --------W-20----Vx0005-----------------------
  560. INT 20 P - Microsoft Windows - VTD - VxD SERVICES
  561.     VxD = 0005h
  562. Note:    the desired VxD and service number are identified by the data
  563.       immediately following the INT 20 instruction, as in:
  564.         INT    20h
  565.         DW    service number
  566.         DW    VxD identifier
  567. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  568.  
  569. (Table 01269)
  570. Values for VTD (VxD ID 0005h) service number:
  571.  0000h    get version
  572.  0001h    update system clock
  573.  0002h    get interrupt period
  574.  0003h    begin minimum interrupt period
  575.  0004h    end minimum interrupt period
  576.  0005h    disable trapping
  577.  0006h    enable trapping
  578.  0007h    get real time
  579.     Return: EDX:EAX = time in 840ns units since Windows was started
  580.  0008h    "VTD_Get_Date_And_Time"
  581.  0009h    "VTD_Adjust_VM_Count"
  582.  000Ah    "VTD_Delay"
  583. SeeAlso: #02646 at INT 2F/AX=1684h/BX=0005h
  584. --------W-20----Vx0006-----------------------
  585. INT 20 P - Microsoft Windows - V86MMGR - VxD SERVICES
  586.     VxD = 0006h
  587. Note:    the desired VxD and service number are identified by the data
  588.       immediately following the INT 20 instruction, as in:
  589.         INT    20h
  590.         DW    service number
  591.         DW    VxD identifier
  592. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  593.  
  594. (Table 01270)
  595. Values for V86MMGR (VxD ID 0006h) service number:
  596.  00h    get version
  597.  01h    allocate V86 pages
  598.  02h    set EMS and XMS limits
  599.  03h    get EMS and XMS limits
  600.  04h    set mapping information
  601.  05h    get mapping information
  602.  06h    Xlat API
  603.  07h    load client pointer
  604.  08h    allocate buffer
  605.  09h    free buffer
  606.  0Ah    get Xlat buffer state
  607.  0Bh    set Xlat buffer state
  608.  0Ch    get VM flat selector
  609.  0Dh    map pages
  610.  0Eh    free page map region
  611.  0Fh    _LocalGlobalReg
  612.  10h    get page status
  613.  11h    set local A20
  614.  12h    reset base pages
  615.  13h    set available mapped pages
  616.  14h    "V86MMGR_NoUMBInitCalls"
  617.  15h    "V86MMGR_Get_EMS_XMS_Avail"
  618.  16h    "V86MMGR_Toggle_HMA"
  619.     EAX = ???
  620.  17h    "V86MMGR_Dev_Init"
  621.  18h    "V86MMGR_Alloc_UM_Page"
  622. SeeAlso: #02646,#01271,INT 2F/AX=1684h"DEVICE API"
  623. --------W-20----Vx0007-----------------------
  624. INT 20 P - Microsoft Windows - PageSwap - VxD SERVICES
  625.     VxD = 0007h
  626. Note:    the desired VxD and service number are identified by the data
  627.       immediately following the INT 20 instruction, as in:
  628.         INT    20h
  629.         DW    service number
  630.         DW    VxD identifier
  631. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  632.  
  633. (Table 01271)
  634. Values for PageSwap (VxD ID 0007h) service number:
  635.  00h    get version
  636.  01h    test create
  637.  02h    create swap file
  638.  03h    destroy swap file
  639.  04h    in
  640.  05h    out
  641.  06h    test if I/O valid
  642.  07h    "Read_Or_Write"
  643.  08h    "Grow_File"
  644.  09h    "Init_File"
  645. SeeAlso: #01270,#01272,#01273,#02648
  646. --------W-20----Vx0009-----------------------
  647. INT 20 P - Microsoft Windows - REBOOT - VxD SERVICES
  648.     VxD = 0009h
  649. Note:    the desired VxD and service number are identified by the data
  650.       immediately following the INT 20 instruction, as in:
  651.         INT    20h
  652.         DW    service number
  653.         DW    VxD identifier
  654. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  655.  
  656. (Table 01272)
  657. Values for REBOOT (VxD ID 0009h) service number:
  658.  00h    get REBOOT version???
  659.  01h    ???
  660.  02h    ???
  661.  03h    ...last service for Windows95 SP1
  662. SeeAlso: #01271,#01273,#02642
  663. --------W-20----Vx000A-----------------------
  664. INT 20 P - Microsoft Windows - VDD - VxD SERVICES
  665.     VxD = 000Ah
  666. Note:    the desired VxD and service number are identified by the data
  667.       immediately following the INT 20 instruction, as in:
  668.         INT    20h
  669.         DW    service number
  670.         DW    VxD identifier
  671. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  672.  
  673. (Table 01273)
  674. Values for VDD (VxD ID 000Ah) service number:
  675.  00h    get version
  676.  01h    PIF state
  677.  02h    get GrabRtn
  678.  03h    hide cursor
  679.  04h    set VM type
  680.  05h    get ModTime
  681.  06h    set HCurTrk
  682.  07h    message clear screen
  683.  08h    message foreground color
  684.  09h    message background color
  685.  0Ah    message output text
  686.  0Bh    message set cursor position
  687.  0Ch    query access
  688.  0Dh    "VDD_Check_Update_Soon"
  689.  0Eh    "VDD_Get_Mini_Dispatch_Table"
  690.  0Fh    "VDD_Register_Virtual_Port"
  691.     DX = base I/O port number
  692.     CL = number of contiguous ports???
  693.  10h    "VDD_Get_VM_Info"
  694.  11h    "VDD_Get_Special_VM_IDs"
  695.     Return: ESI = ???
  696.         EDI = ???
  697.  12h    "VDD_Register_Extra_Screen_Selector"
  698.  13h    "VDD_Takeover_VGA_Port"
  699.     DX = VGA I/O port number (03C2h, etc.)
  700.     ECX -> routine to call on I/O access
  701.     Return: ECX -> previous handler (to be jumped to at end of new handler)
  702.  14h    ???
  703.  15h    ???
  704.  16h    ...last service for Windows95 SP1
  705. SeeAlso: #01272,#01274,#02648
  706. --------W-20----Vx000B-----------------------
  707. INT 20 P - Microsoft Windows - VSD - VxD SERVICES
  708.     VxD = 000Bh
  709. Note:    the desired VxD and service number are identified by the data
  710.       immediately following the INT 20 instruction, as in:
  711.         INT    20h
  712.         DW    service number
  713.         DW    VxD identifier
  714. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  715.  
  716. (Table 01274)
  717. Values for VSD (VxD ID 000Bh) service number:
  718.  00h    get version
  719.  01h    bell
  720.  02h    sound on
  721.  03h    "VSD_TakeSoundPort"
  722. SeeAlso: #01273,#01275
  723. --------W-20----Vx000C-----------------------
  724. INT 20 P - Microsoft Windows - VMD / VMOUSE - VxD SERVICES
  725.     VxD = 000Ch
  726. Note:    the desired VxD and service number are identified by the data
  727.       immediately following the INT 20 instruction, as in:
  728.         INT    20h
  729.         DW    service number
  730.         DW    VxD identifier
  731. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  732.  
  733. (Table 01275)
  734. Values for VMD / VMOUSE (VxD ID 000Ch) service number:
  735.  0000h    get version
  736.  0001h    set mouse type
  737.  0002h    get mouse owner
  738.  0003h    "VMOUSE_Post_Pointer_Message"
  739.  0004h    "VMOUSE_Set_Cursor_Proc"
  740.  0005h    "VMOUSE_Call_Cursor_Proc"
  741.  0006h    "VMOUSE_Set_Mouse_Data~Get_Mouse_Data"
  742.  0007h    "VMOUSE_Manipulate_Pointer_Message"
  743.  0008h    "VMOUSE_Set_Middle_Button"
  744.  0009h    "VMD_Set_Middle_Button"
  745.  000Ah    "VMD_Enable_Disable_Mouse_Events"
  746.  000Bh    "VMD_Post_Absolute_Pointer_Message"
  747.     ...last service for Windows95 SP1
  748. SeeAlso: #01274,#01276,INT 2F/AX=1684h/BX=000Ch
  749. --------W-20----Vx000D-----------------------
  750. INT 20 P - Microsoft Windows - VKD - VxD SERVICES
  751.     VxD = 000Dh
  752. Note:    the desired VxD and service number are identified by the data
  753.       immediately following the INT 20 instruction, as in:
  754.         INT    20h
  755.         DW    service number
  756.         DW    VxD identifier
  757. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  758.  
  759. (Table 01276)
  760. Values for VKD (VxD ID 000Dh) service number:
  761.  0000h    get version
  762.  0001h    define hotkey
  763.  0002h    remove hotkey
  764.  0003h    locally enable hotkey
  765.  0004h    locally disable hotkey
  766.  0005h    reflect hotkey
  767.  0006h    cancel hotkey state
  768.  0007h    force keys
  769.  0008h    get keyboard owner
  770.  0009h    define paste mode
  771.  000Ah    start pasting
  772.  000Bh    cancel paste
  773.  000Ch    get message key
  774.  000Dh    peek message key
  775.  000Eh    flush message key queue
  776.  000Fh    "VKD_Enable_Keyboard"
  777.  0010h    "VKD_Disable_Keyboard"
  778.  0011h    "VKD_Get_Shift_State"
  779.  0012h    "VKD_Filter_Keyboard_Input"
  780.  0013h    "VKD_Put_Byte"
  781.  0014h    "VKD_Set_Shift_State"
  782.     ...last service for Windows95 SP1
  783. SeeAlso: #01275,#01277
  784. --------W-20----Vx000E-----------------------
  785. INT 20 P - Microsoft Windows - VCD - VxD SERVICES
  786.     VxD = 000Eh
  787. Note:    the desired VxD and service number are identified by the data
  788.       immediately following the INT 20 instruction, as in:
  789.         INT    20h
  790.         DW    service number
  791.         DW    VxD identifier
  792. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  793.  
  794. (Table 01277)
  795. Values for VCD (VxD ID 000Eh) service number:
  796.  0000h    get version
  797.  0001h    set port global
  798.  0002h    get focus
  799.  0003h    virtualize port
  800.  0004h    "VCD_Acquire_Port"
  801.  0005h    "VCD_Free_Port"
  802.  0006h    "VCD_Acquire_Port_Windows_Style"
  803.  0007h    "VCD_Free_Port_Windows_Style"
  804.  0008h    "VCD_Steal_Port_Windows_Style"
  805.  0009h    "VCD_Find_COM_Index"
  806.  000Ah    "VCD_Set_Port_Global_Special"
  807.  000Bh    "VCD_Virtualize_Port_Dynamic"
  808.  000Ch    "VCD_Unvirtualize_Port_Dynamic"
  809.     ...last service for Windows95 SP1
  810. SeeAlso: #01276,#01278
  811. --------W-20----Vx0010-----------------------
  812. INT 20 P - Microsoft Windows - BlockDev / IOS - VxD SERVICES
  813.     VxD = 0010h
  814. Note:    the desired VxD and service number are identified by the data
  815.       immediately following the INT 20 instruction, as in:
  816.         INT    20h
  817.         DW    service number
  818.         DW    VxD identifier
  819. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  820.  
  821. (Table 01278)
  822. Values for BlockDev/IOS (VxD ID 0010h) service number:
  823.  0000h    get version
  824.  0001h    register device
  825.  0002h    find INT 13 drive
  826.  0003h    get device list
  827.  0004h    send command
  828.  0005h    command complete
  829.  0006h    synchronous command
  830.  0007h    "IOS_Register"
  831.  0008h    "IOS_Requestor_Service"
  832.  0009h    "IOS_Exclusive_Access"
  833.  000Ah    "IOS_Send_Next_Command"
  834.  000Bh    "IOS_Set_Async_Time_Out"
  835.  000Ch    "IOS_Signal_Semaphore_No_Switch"
  836.  000Dh    "IOSIdleStatus"
  837.  000Eh    "IOSMapIORSToI24"
  838.  000Fh    "IOSMapIORSToI21"
  839.  0010h    "PrintLog"
  840. SeeAlso: #01277,#01279
  841. --------W-20----Vx0011-----------------------
  842. INT 20 P - Microsoft Windows - VMCPD - VxD SERVICES
  843.     VxD = 0011h
  844. Note:    the desired VxD and service number are identified by the data
  845.       immediately following the INT 20 instruction, as in:
  846.         INT    20h
  847.         DW    service number
  848.         DW    VxD identifier
  849. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  850.  
  851. (Table 01279)
  852. Values for VMCPD (VxD ID 0011h) service number:
  853.  0000h    "VMCPD_Get_Version"
  854.  0001h    "VMCPD_Get_Virt_State"
  855.  0002h    "VMCPD_Set_Virt_State"
  856.  0003h    "VMCPD_Get_CR0_State"
  857.  0004h    "VMCPD_Set_CR0_State"
  858.  0005h    "VMCPD_Get_Thread_State"
  859.  0006h    "VMCPD_Set_Thread_State"
  860.  0007h    "_VMCPD_Get_FP_Instruction_Size"
  861.  0008h    "VMCPD_Set_Thread_Precision"
  862. SeeAlso: #01278,#01280,#02642
  863. --------W-20----Vx0012-----------------------
  864. INT 20 P - Microsoft Windows - EBIOS - VxD SERVICES
  865.     VxD = 0012h
  866. Note:    the desired VxD and service number are identified by the data
  867.       immediately following the INT 20 instruction, as in:
  868.         INT    20h
  869.         DW    service number
  870.         DW    VxD identifier
  871. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  872.  
  873. (Table 01280)
  874. Values for EBIOS (VxD ID 0012h) service number:
  875.  00h    get EBIOS version
  876.  01h    get unused memory
  877. SeeAlso: #01279,#01281
  878. --------W-20----Vx0014-----------------------
  879. INT 20 P - Microsoft Windows - VNETBIOS - VxD SERVICES
  880.     VxD = 0014h
  881. Note:    the desired VxD and service number are identified by the data
  882.       immediately following the INT 20 instruction, as in:
  883.         INT    20h
  884.         DW    service number
  885.         DW    VxD identifier
  886. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  887.  
  888. (Table 01281)
  889. Values for VNETBIOS (VxD ID 0014h) service number:
  890.  00h    get version
  891.  01h    register
  892.  02h    submit
  893.  03h    enum
  894.  04h    deregister
  895.  05h    register2
  896.  06h    map
  897.  07h    enum2
  898. SeeAlso: #01280,#01282
  899. --------W-20----Vx0015-----------------------
  900. INT 20 P - Microsoft Windows - DOSMGR - VxD SERVICES
  901.     VxD = 0015h
  902. Note:    the desired VxD and service number are identified by the data
  903.       immediately following the INT 20 instruction, as in:
  904.         INT    20h
  905.         DW    service number
  906.         DW    VxD identifier
  907. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  908.  
  909. (Table 01282)
  910. Values for DOSMGR (VxD ID 0015h) service number:
  911.  0000h    get version
  912.  0001h    set exec VM data
  913.  0002h    coyp VM drive state
  914.  0003h    execute VM
  915.  0004h    get InDOS pointer
  916.  0005h    add device
  917.  0006h    remove device
  918.  0007h    instance device
  919.  0008h    get DOS critical status
  920.  0009h    enable InDOS polling
  921.  000Ah    backfill allowed
  922.  000Bh    "LocalGlobalReg"
  923.  000Ch    "Init_UMB_Area"
  924.  000Dh    "Begin_V86_App"
  925.  000Eh    "End_V86_App"
  926.  000Fh    "Alloc_Local_Sys_VM_Mem"
  927.     EAX = number of paragraphs??? to allocate
  928.  0010h    "DOSMGR_Grow_CDSs"
  929.  0011h    "DOSMGR_Translate_Server_DOS_Call"
  930.  0012h    "DOSMGR_MMGR_PSP_Change_Notifier"
  931. SeeAlso: #01281,#02656 at INT 2F/AX=1684h/BX=0015h
  932. --------W-20----Vx0017-----------------------
  933. INT 20 P - Microsoft Windows - SHELL - VxD SERVICES
  934.     VxD = 0017h
  935. Note:    the desired VxD and service number are identified by the data
  936.       immediately following the INT 20 instruction, as in:
  937.         INT    20h
  938.         DW    service number
  939.         DW    VxD identifier
  940. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  941.  
  942. (Table 01283)
  943. Values for SHELL (VxD ID 0017h) service number:
  944.  0000h    get version
  945.  0001h    resolve contention
  946.  0002h    event
  947.  0003h    SYSMODAL message
  948.  0004h    message
  949.  0005h    get VM information
  950.  0006h    "_SHELL_PostMessage"
  951.  0007h    "_SHELL_WinExec"
  952.  0008h    "_SHELL_CallDll"
  953.  0009h    "SHELL_OpenClipboard"
  954.  000Ah    "SHELL_SetClipboardData"
  955.  000Bh    "SHELL_GetClipboardData"
  956.  000Ch    "SHELL_CloseClipboard"
  957.  000Dh    "_SHELL_Install_Taskman_Hooks"
  958.  000Eh    "SHELL_Hook_Properties"
  959.  000Fh    "SHELL_Unhook_Properties"
  960.  0010h    "SHELL_OEMKeyScan"
  961.  0011h    "SHELL_Update_User_Activity"
  962.  0012h    "_SHELL_UnhookSystemBroadcast"
  963.  0013h    "_SHELL_LocalAllocEx"
  964.  0014h    "_SHELL_LocalFree"
  965.  0015h    "_SHELL_LoadLibrary"
  966.  0016h    "_SHELL_FreeLibrary"
  967.  0017h    "_SHELL_GetProcAddress"
  968.  0018h    "_SHELL_CallDll"
  969.  0019h    "_SHELL_SuggestSingleMSDOSMode"
  970.  001Ah    "SHELL_CheckHotkeyAllowed"
  971.  001Bh    "_SHELL_GetDOSAppInfo"
  972. SeeAlso: #01282,#01284,#02657 at INT 2F/AX=1684h/BX=0017h
  973. --------W-20----Vx0018-----------------------
  974. INT 20 P - Microsoft Windows - VMPoll - VxD SERVICES
  975.     VxD = 0018h
  976. Note:    the desired VxD and service number are identified by the data
  977.       immediately following the INT 20 instruction, as in:
  978.         INT    20h
  979.         DW    service number
  980.         DW    VxD identifier
  981. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  982.  
  983. (Table 01284)
  984. Values for VMPoll (VxD ID 0018h) service number:
  985.  00h    get version
  986.  01h    enable/disable
  987.  02h    reset detection
  988.  03h    check idle
  989. SeeAlso: #01269,#02657 at INT 2F/AX=1684h/BX=0017h
  990. --------W-20----Vx001A-----------------------
  991. INT 20 P - Microsoft Windows - DOSNET - VxD SERVICES
  992.     VxD = 001Ah
  993. Note:    the desired VxD and service number are identified by the data
  994.       immediately following the INT 20 instruction, as in:
  995.         INT    20h
  996.         DW    service number
  997.         DW    VxD identifier
  998. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  999.  
  1000. (Table 01285)
  1001. Values for DOSNET (VxD ID 001Ah) service number:
  1002.  00h    get version
  1003.  01h    send FILESYSCHANGE
  1004.  02h    do PSP adjust
  1005. SeeAlso: #01284,#01286
  1006. --------W-20----Vx001B-----------------------
  1007. INT 20 P - Microsoft Windows - VFD - VxD SERVICES
  1008.     VxD = 001Bh
  1009. Note:    the desired VxD and service number are identified by the data
  1010.       immediately following the INT 20 instruction, as in:
  1011.         INT    20h
  1012.         DW    service number
  1013.         DW    VxD identifier
  1014. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01286,#01340
  1015.  
  1016. (Table 01286)
  1017. Values for VFD (VxD ID 001Bh) service number:
  1018.  0000h    get version
  1019. SeeAlso: #01285,#01287
  1020. --------W-20----Vx001C-----------------------
  1021. INT 20 P - Microsoft Windows - LoadHi - VxD SERVICES
  1022.     VxD = 001Ch
  1023. Note:    the desired VxD and service number are identified by the data
  1024.       immediately following the INT 20 instruction, as in:
  1025.         INT    20h
  1026.         DW    service number
  1027.         DW    VxD identifier
  1028. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1029.  
  1030. (Table 01287)
  1031. Values for LoadHi (VxD ID 001Ch) service number:
  1032.  00h    get version
  1033.     Return:    CF clear
  1034.         EAX = version (AH = major, AL = minor)
  1035.         ESI -> ASCIZ signature "LoadHi"
  1036. SeeAlso: #01286,#01288
  1037. --------W-20----Vx0020-----------------------
  1038. INT 20 P - Microsoft Windows - Int13 - VxD SERVICES
  1039.     VxD = 0020h
  1040. Note:    the desired VxD and service number are identified by the data
  1041.       immediately following the INT 20 instruction, as in:
  1042.         INT    20h
  1043.         DW    service number
  1044.         DW    VxD identifier
  1045. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1046.  
  1047. (Table 01288)
  1048. Values for Int13 (VxD ID 0020h) service number:
  1049.  00h    get version
  1050.  01h    device registered
  1051.  02h    translate VM interrupt
  1052.  03h    hooking BIOS interrupt
  1053.  04h    unhooking BIOS interrupt
  1054. SeeAlso: #01287,#01289
  1055. --------W-20----Vx0021-----------------------
  1056. INT 20 P - Microsoft Windows - PAGEFILE - VxD SERVICES
  1057.     VxD = 0021h
  1058. Note:    the desired VxD and service number are identified by the data
  1059.       immediately following the INT 20 instruction, as in:
  1060.         INT    20h
  1061.         DW    service number
  1062.         DW    VxD identifier
  1063. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1064.  
  1065. (Table 01289)
  1066. Values for PAGEFILE (VxD ID 0021h) service number:
  1067.  00h    get version
  1068.  01h    init file
  1069.  02h    clean up
  1070.  03h    grow file
  1071.  04h    read or write
  1072.  05h    cancel
  1073.  06h    test I/O valid
  1074.  07h    "Get_Size_Info"
  1075.  08h    "Set_Async_Manager"
  1076.  09h    "Call_Async_Manager"
  1077. SeeAlso: #01288,#02661 at INT 2F/AX=1684h/BX=0021h
  1078. --------W-20----Vx0026-----------------------
  1079. INT 20 P - Microsoft Windows - VPOWERD - VxD SERVICES
  1080.     VxD = 0026h
  1081. Note:    the desired VxD and service number are identified by the data
  1082.       immediately following the INT 20 instruction, as in:
  1083.         INT    20h
  1084.         DW    service number
  1085.         DW    VxD identifier
  1086. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1087.  
  1088. (Table 01290)
  1089. Values for VPOWERD (VxD ID 0026h) service number:
  1090.  00h    get version
  1091.     Return:    CF clear
  1092.         EAX = version (AH = major, AL = minor)
  1093.  01h    get APM BIOS version
  1094.     Return: CF clear
  1095.         EAX = APM BIOS version
  1096.  02h    get current power management level
  1097.     Return: CF clear
  1098.         EAX = power management level
  1099.  03h    enable/disable power management (see INT 15/AX=5308h)
  1100.     Return: EAX = error code (see #02665) or 00000000h if successful
  1101.  04h    set power state (see INT 15/AX=5307h)
  1102.     ???
  1103.     Return: EAX = error code (see #02665) or 00000000h if successful
  1104.  05h    set system power status
  1105.     Return: EAX = error code (see #02665) or 00000000h if successful
  1106.  06h    restore APM power-on defaults (see INT 15/AX=5309h)
  1107.     Return: EAX = error code (see #02665) or 00000000h if successful
  1108.  07h    get power status (see INT 15/AX=530Ah)
  1109.     Return: ???
  1110.  08h    get APM 1.1 power state (see INT 15/AX=530Ch)
  1111.     Return: ???
  1112.  09h    invoke OEM APM function
  1113.     ??? -> bufer containing parameters for INT 15/AX=5380h
  1114.     Return: EAX = error code (see #02665) or 00000000h if successful
  1115.         buffer updated if successful
  1116.  0Ah    register power handler
  1117.     ???
  1118.     Return: EAX = error code (see #02665) or 00000000h if successful
  1119.  0Bh    deregister power handler
  1120.     ???
  1121.     Return: EAX = error code (see #02665) or 00000000h if successful
  1122.  0Ch    Win32 get system power status
  1123.  0Dh    Win32 set system power status
  1124. SeeAlso: #01289,#01291,INT 2F/AX=1684h/BX=0026h
  1125. --------W-20----Vx0027-----------------------
  1126. INT 20 P - Microsoft Windows - VXDLDR - VxD SERVICES
  1127.     VxD = 0027h
  1128. Note:    the desired VxD and service number are identified by the data
  1129.       immediately following the INT 20 instruction, as in:
  1130.         INT    20h
  1131.         DW    service number
  1132.         DW    VxD identifier
  1133. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1134.  
  1135. (Table 01291)
  1136. Values for VXDLDR (VxD ID 0027h) service number:
  1137.  0000h    "VXDLDR_Get_Version"
  1138.  0001h    "VXDLDR_LoadDevice"
  1139.  0002h    "VXDLDR_UnloadDevice"
  1140.  0003h    "VXDLDR_DevInitSucceeded"
  1141.  0004h    "VXDLDR_DevInitFailed"
  1142.  0005h    "VXDLDR_GetDeviceList"
  1143.  0006h    "VXDLDR_UnloadMe"
  1144.  0007h    "PELDR_LoadModule"
  1145.  0008h    "PELDR_GetModuleHandle"
  1146.  0009h    "PELDR_GetModuleUsage"
  1147.  000Ah    "PELDR_GetEntryPoint"
  1148.  000Bh    "PELDR_GetProcAddress"
  1149.  000Ch    "PELDR_AddExportTable"
  1150.  000Dh    "PELDR_RemoveExportTable"
  1151.  000Eh    "PELDR_FreeModule"
  1152.  000Fh    "VXDLDR_Notify"
  1153.  0010h    "_PELDR_InitCompleted"
  1154.  0011h    "_PELDR_LoadModuleEx"
  1155. SeeAlso: #01289,#01292
  1156. --------W-20----Vx0028-----------------------
  1157. INT 20 P - Microsoft Windows - NDIS - VxD SERVICES
  1158.     VxD = 0028h
  1159. Note:    the desired VxD and service number are identified by the data
  1160.       immediately following the INT 20 instruction, as in:
  1161.         INT    20h
  1162.         DW    service number
  1163.         DW    VxD identifier
  1164. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1165.  
  1166. (Table 01292)
  1167. Values for NDIS (VxD ID 0028h) service number:
  1168.  00h    "NdisGetVersion"
  1169.  01h    "NdisAllocateSpinLock"
  1170.  02h    "NdisFreeSpinLock"
  1171.  03h    "NdisAcquireSpinLock"
  1172.  04h    "NdisReleaseSpinLock"
  1173.  05h    "NdisOpenConfiguration"
  1174.  06h    "NdisReadConfiguration"
  1175.  07h    "NdisCloseConfiguration"
  1176.  08h    "NdisReadEisaSlotInformation"
  1177.  09h    "NdisReadMcaPosInformation"
  1178.  0Ah    "NdisAllocateMemory"
  1179.  0Bh    "NdisFreeMemory"
  1180.  0Ch    "NdisSetTimer"
  1181.  0Dh    "NdisCancelTimer"
  1182.  0Eh    "NdisStallExecution"
  1183.  0Fh    "NdisInitializeInterrupt"
  1184.  10h    "NdisRemoveInterrupt"
  1185.  11h    "NdisSynchronizeWithInterrupt"
  1186.  12h    "NdisOpenFile"
  1187.  13h    "NdisMapFile"
  1188.  14h    "NdisUnmapFile"
  1189.  15h    "NdisCloseFile"
  1190.  16h    "NdisAllocatePacketPool"
  1191.  17h    "NdisFreePacketPool"
  1192.  18h    "NdisAllocatePacket"
  1193.  19h    "NdisReinitializePacket"
  1194.  1Ah    "NdisFreePacket"
  1195.  1Bh    "NdisQueryPacket"
  1196.  1Ch    "NdisAllocateBufferPool"
  1197.  1Dh    "NdisFreeBufferPool"
  1198.  1Eh    "NdisAllocateBuffer"
  1199.  1Fh    "NdisCopyBuffer"
  1200.  20h    "NdisFreeBuffer"
  1201.  21h    "NdisQueryBuffer"
  1202.  22h    "NdisGetBufferPhysicalAddress"
  1203.  23h    "NdisChainBufferAtFront"
  1204.  24h    "NdisChainBufferAtBack"
  1205.  25h    "NdisUnchainBufferAtFront"
  1206.  26h    "NdisUnchainBufferAtBack"
  1207.  27h    "NdisGetNextBuffer"
  1208.  28h    "NdisCopyFromPacketToPacket"
  1209.  29h    "NdisRegisterProtocol"
  1210.  2Ah    "NdisDeregisterProtocol"
  1211.  2Bh    "NdisOpenAdapter"
  1212.  2Ch    "NdisCloseAdapter"
  1213.  2Dh    "NdisSend"
  1214.  2Eh    "NdisTransferData"
  1215.  2Fh    "NdisReset"
  1216.  30h    "NdisRequest"
  1217.  31h    "NdisInitializeWrapper"
  1218.  32h    "NdisTerminateWrapper"
  1219.  33h    "NdisRegisterMac"
  1220.  34h    "NdisDeregisterMac"
  1221.  35h    "NdisRegisterAdapter"
  1222.  36h    "NdisDeregisterAdapter"
  1223.  37h    "NdisCompleteOpenAdapter"
  1224.  38h    "NdisCompleteCloseAdapter"
  1225.  39h    "NdisCompleteSend"
  1226.  3Ah    "NdisCompleteTransferData"
  1227.  3Bh    "NdisCompleteReset"
  1228.  3Ch    "NdisCompleteRequest"
  1229.  3Dh    "NdisIndicateReceive"
  1230.  3Eh    "NdisIndicateReceiveComplete"
  1231.  3Fh    "NdisIndicateStatus"
  1232.  40h    "NdisIndicateStatusComplete"
  1233.  41h    "NdisCompleteQueryStatistics"
  1234.  42h    "NdisEqualString"
  1235.  43h    "NdisNetAddressStringToBinary"
  1236.  44h    "NdisReadNetworkAddress"
  1237.  45h    "NdisWriteErrorLogEntry"
  1238.  46h    "C_MapPhysToLinear"
  1239.  47h    "C_HeapFree"
  1240.  48h    "NdisAllocateSharedMemory"
  1241.  49h    "NdisFreeSharedMemory"
  1242.  ...
  1243.  5Fh    ...last service for Windows95 SP1
  1244. SeeAlso: #01291,#01293
  1245. --------W-20----Vx002A-----------------------
  1246. INT 20 P - Microsoft Windows - VWIN32 - VxD SERVICES
  1247.     VxD = 002Ah
  1248. Note:    the desired VxD and service number are identified by the data
  1249.       immediately following the INT 20 instruction, as in:
  1250.         INT    20h
  1251.         DW    service number
  1252.         DW    VxD identifier
  1253. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1254.  
  1255. (Table 01293)
  1256. Values for VWIN32 (VxD ID 002Ah) service number:
  1257.  0000h    "VWin32_Get_Version"
  1258.  0001h    "VWin32_Wake_For_Event"
  1259.  0002h    "_VWIN32_QueueUserApc"
  1260.  0003h    "_VWIN32_Get_Thread_Context"
  1261.  0004h    "_VWIN32_Set_Thread_Context"
  1262.  0005h    "_VWIN32_CopyMem"
  1263.  0006h    "_VWIN32_BlockForTermination"
  1264.  0007h    "_VWIN32_Emulate_Npx"
  1265.  0008h    "_VWIN32_CheckDelayedNpxTrap"
  1266.  0009h    "VWIN32_EnterCrstR0"
  1267.  000Ah    "VWIN32_LeaveCrstR0"
  1268.  000Bh    "_VWIN32_FaultPopup"
  1269.  000Ch    "VWIN32_GetContextHandle"
  1270.  000Dh    "VWIN32_GetCurrentProcessHandle"
  1271.  000Eh    "_VWIN32_SetWin32Event"
  1272.  000Fh    "_VWIN32_PulseWin32Event"
  1273.  0010h    "_VWIN32_ResetWin32Event"
  1274.  0011h    "_VWIN32_WaitSingleObject"
  1275.  0012h    "_VWIN32_WaitMultipleObjects"
  1276.  0013h    "_VWIN32_CreateRing0Thread"
  1277.  0014h    "_VWIN32_CloseVxDHandle"
  1278.  0015h    "VWIN32_ActiveTimeBiasSet"
  1279.  0016h    "VWIN32_GetCurrentDirectory"
  1280.  0017h    "VWIN32_BlueScreenPopup"
  1281.  0018h    "VWIN32_TerminateApp"
  1282.  0019h    "_VWIN32_QueueKernelAPC"
  1283.  001Ah    "VWIN32_SysErrorBox"
  1284.  001Bh    "_VWIN32_IsClientWin32"
  1285.  001Ch    "VWIN32_IFSRIPWhenLev2Taken"
  1286. SeeAlso: #01292,#01294
  1287. --------W-20----Vx002B-----------------------
  1288. INT 20 P - Microsoft Windows - VCOMM - VxD SERVICES
  1289.     VxD = 002Bh
  1290. Note:    the desired VxD and service number are identified by the data
  1291.       immediately following the INT 20 instruction, as in:
  1292.         INT    20h
  1293.         DW    service number
  1294.         DW    VxD identifier
  1295. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1296.  
  1297. (Table 01294)
  1298. Values for VCOMM (VxD ID 002Bh) service number:
  1299.  0000h    "VCOMM_Get_Version"
  1300.  0001h    "_VCOMM_Register_Port_Driver"
  1301.  0002h    "_VCOMM_Acquire_Port"
  1302.  0003h    "_VCOMM_Release_Port"
  1303.  0004h    "_VCOMM_OpenComm"
  1304.  0005h    "_VCOMM_SetCommState"
  1305.  0006h    "_VCOMM_GetCommState"
  1306.  0007h    "_VCOMM_SetupComm"
  1307.  0008h    "_VCOMM_TransmitCommChar"
  1308.  0009h    "_VCOMM_CloseComm"
  1309.  000Ah    "_VCOMM_GetCommQueueStatus"
  1310.  000Bh    "_VCOMM_ClearCommError"
  1311.  000Ch    "_VCOMM_GetModemStatus"
  1312.  000Dh    "_VCOMM_GetCommProperties"
  1313.  000Eh    "_VCOMM_EscapeCommFunction"
  1314.  000Fh    "_VCOMM_PurgeComm"
  1315.  0010h    "_VCOMM_SetCommEventMask"
  1316.  0011h    "_VCOMM_GetCommEventMask"
  1317.  0012h    "_VCOMM_WriteComm"
  1318.  0013h    "_VCOMM_ReadComm"
  1319.  0014h    "_VCOMM_EnableCommNotification"
  1320.  0015h    "_VCOMM_GetLastError"
  1321.  0016h    "_VCOMM_Steal_Port"
  1322.  0017h    "_VCOMM_SetReadCallBack"
  1323.  0018h    "_VCOMM_SetWriteCallBack"
  1324.  0019h    "_VCOMM_GetSetCommTimeouts"
  1325.  001Ah    "_VCOMM_SetWriteRequest"
  1326.  001Bh    "_VCOMM_SetReadRequest"
  1327.  001Ch    "_VCOMM_Dequeue_Request"
  1328.  001Dh    "_VCOMM_Dequeue_Request"
  1329.  001Eh    "_VCOMM_Enumerate_DevNodes"
  1330.  001Fh    "VCOMM_Map_Win32DCB_To_Ring0"
  1331.  0020h    "VCOMM_Map_Ring0DCB_To_Win32"
  1332.  0021h    "_VCOMM_Get_Contention_Handler"
  1333.  0022h    "_VCOMM_Map_Name_To_Resource"
  1334. SeeAlso: #01293,#01295
  1335. --------W-20----Vx002C-----------------------
  1336. INT 20 P - Microsoft Windows - SPOOLER - VxD SERVICES
  1337.     VxD = 002Ch
  1338. Note:    the desired VxD and service number are identified by the data
  1339.       immediately following the INT 20 instruction, as in:
  1340.         INT    20h
  1341.         DW    service number
  1342.         DW    VxD identifier
  1343. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1344.  
  1345. (Table 01295)
  1346. Values for SPOOLER (VxD ID 002Ch) service number:
  1347.  0000h    get version???
  1348.  0001h    ???
  1349.  0010h    ...last service for Windows95 SP1
  1350. SeeAlso: #01294,#01296
  1351. --------W-20----Vx0032-----------------------
  1352. INT 20 P - Microsoft Windows - VSERVER - VxD SERVICES
  1353.     VxD = 0032h
  1354. Note:    the desired VxD and service number are identified by the data
  1355.       immediately following the INT 20 instruction, as in:
  1356.         INT    20h
  1357.         DW    service number
  1358.         DW    VxD identifier
  1359. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1360.  
  1361. (Table 01296)
  1362. Values for VSERVER (VxD ID 0032h) service number:
  1363.  00h    get VSERVER version
  1364.     Return: CF clear
  1365.         EAX = version (AH = major, AL = minor)
  1366.         EBX = ??? (00000000h)
  1367.  01h    allocate ???
  1368.     AX = ???
  1369.     ESI = ???
  1370.     Return: CF clear if successful
  1371.         CF set on error (table full)
  1372.  02h    NOP???
  1373.     Return: EBX = 00000000h
  1374.  03h    ???
  1375.     Return: ZF clear
  1376. SeeAlso: #01295,#01297,INT 2F/AX=1684h/BX=0032h
  1377. --------W-20----Vx0033-----------------------
  1378. INT 20 P - Microsoft Windows - CONFIGMG - VxD SERVICES
  1379.     VxD = 0033h
  1380. Note:    the desired VxD and service number are identified by the data
  1381.       immediately following the INT 20 instruction, as in:
  1382.         INT    20h
  1383.         DW    service number
  1384.         DW    VxD identifier
  1385. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1386.  
  1387. (Table 01297)
  1388. Values for CONFIGMG (VxD ID 0033h) service number:
  1389.  0000h    "_CONFIGMG_Get_Version"
  1390.  0001h    "_CONFIGMG_Initialize"
  1391.  0002h    "_CONFIGMG_Locate_DevNode"
  1392.  0003h    "_CONFIGMG_Get_Parent"
  1393.  0004h    "_CONFIGMG_Get_Child"
  1394.  0005h    "_CONFIGMG_Get_Sibling"
  1395.  0006h    "_CONFIGMG_Get_Device_ID_Size"
  1396.  0007h    "_CONFIGMG_Get_Device_ID"
  1397.  0008h    "_CONFIGMG_Get_Depth"
  1398.  0009h    "_CONFIGMG_Get_Private_DWord"
  1399.  000Ah    "_CONFIGMG_Set_Private_DWord"
  1400.  000Bh    "_CONFIGMG_Create_DevNode"
  1401.  000Ch    "_CONFIGMG_Query_Remove_SubTree"
  1402.  000Dh    "_CONFIGMG_Remove_SubTree"
  1403.  000Eh    "_CONFIGMG_Register_Device_Driver"
  1404.  000Fh    "_CONFIGMG_Register_Enumerator"
  1405.  0010h    "_CONFIGMG_Register_Arbitrator"
  1406.  0011h    "_CONFIGMG_Deregister_Arbitrator"
  1407.  0012h    "_CONFIGMG_Query_Arbitrator_Free_Size"
  1408.  0013h    "_CONFIGMG_Query_Arbitrator_Free_Data"
  1409.  0014h    "_CONFIGMG_Sort_NodeList"
  1410.  0015h    "_CONFIGMG_Yield"
  1411.  0016h    "_CONFIGMG_Lock"
  1412.  0017h    "_CONFIGMG_Unlock"
  1413.  0018h    "_CONFIGMG_Add_Empty_Log_Conf"
  1414.  0019h    "_CONFIGMG_Free_Log_Conf"
  1415.  001Ah    "_CONFIGMG_Get_First_Log_Conf"
  1416.  001Bh    "_CONFIGMG_Get_Next_Log_Conf"
  1417.  001Ch    "_CONFIGMG_Add_Res_Des"
  1418.  001Dh    "_CONFIGMG_Modify_Res_Des"
  1419.  001Eh    "_CONFIGMG_Free_Res_Des"
  1420.  001Fh    "_CONFIGMG_Get_Next_Res_Des"
  1421.  0020h    "_CONFIGMG_Get_Performance_Info"
  1422.  0021h    "_CONFIGMG_Get_Res_Des_Data_Size"
  1423.  0022h    "_CONFIGMG_Get_Res_Des_Data"
  1424.  0023h    "_CONFIGMG_Process_Events_Now"
  1425.  0024h    "_CONFIGMG_Create_Range_List"
  1426.  0025h    "_CONFIGMG_Add_Range"
  1427.  0026h    "_CONFIGMG_Delete_Range"
  1428.  0027h    "_CONFIGMG_Test_Range_Available"
  1429.  0028h    "_CONFIGMG_Dup_Range_List"
  1430.  0029h    "_CONFIGMG_Free_Range_List"
  1431.  002Ah    "_CONFIGMG_Invert_Range_List"
  1432.  002Bh    "_CONFIGMG_Intersect_Range_List"
  1433.  002Ch    "_CONFIGMG_First_Range"
  1434.  002Dh    "_CONFIGMG_Next_Range"
  1435.  002Eh    "_CONFIGMG_Dump_Range_List"
  1436.  002Fh    "_CONFIGMG_Load_DLVxDs"
  1437.  0030h    "_CONFIGMG_Get_DDBs"
  1438.  0031h    "_CONFIGMG_Get_CRC_CheckSum"
  1439.  0032h    "_CONFIGMG_Register_DevLoader"
  1440.  0033h    "_CONFIGMG_Reenumerate_DevNode"
  1441.  0034h    "_CONFIGMG_Setup_DevNode"
  1442.  0035h    "_CONFIGMG_Reset_Children_Marks"
  1443.  0036h    "_CONFIGMG_Get_DevNode_Status"
  1444.  0037h    "_CONFIGMG_Remove_Unmarked_Children"
  1445.  0038h    "_CONFIGMG_ISAPNP_To_CM"
  1446.  0039h    "_CONFIGMG_CallBack_Device_Driver"
  1447.  003Ah    "_CONFIGMG_CallBack_Enumerator"
  1448.  003Bh    "_CONFIGMG_Get_Alloc_Log_Conf"
  1449.  003Ch    "_CONFIGMG_Get_DevNode_Key_Size"
  1450.  003Dh    "_CONFIGMG_Get_DevNode_Key"
  1451.  003Eh    "_CONFIGMG_Read_Registry_Value"
  1452.  003Fh    "_CONFIGMG_Write_Registry_Value"
  1453.  0040h    "_CONFIGMG_Disable_DevNode"
  1454.  0041h    "_CONFIGMG_Enable_DevNode"
  1455.  0042h    "_CONFIGMG_Move_DevNode"
  1456.  0043h    "_CONFIGMG_Set_Bus_Info"
  1457.  0044h    "_CONFIGMG_Get_Bus_Info"
  1458.  0045h    "_CONFIGMG_Set_HW_Prof"
  1459.  0046h    "_CONFIGMG_Recompute_HW_Prof"
  1460.  0047h    "_CONFIGMG_Query_Change_HW_Prof"
  1461.  0048h    "_CONFIGMG_Get_Device_Driver_Private_DWord"
  1462.  0049h    "_CONFIGMG_Set_Device_Driver_Private_DWord"
  1463.  004Ah    "_CONFIGMG_Get_HW_Prof_Flags"
  1464.  004Bh    "_CONFIGMG_Set_HW_Prof_Flags"
  1465.  004Ch    "_CONFIGMG_Read_Registry_Log_Confs"
  1466.  004Dh    "_CONFIGMG_Run_Detection"
  1467.  004Eh    "_CONFIGMG_Call_At_Appy_Time"
  1468.  004Fh    "_CONFIGMG_Fail_Change_HW_Prof"
  1469.  0050h    "_CONFIGMG_Set_Private_Problem"
  1470.  0051h    "_CONFIGMG_Debug_DevNode"
  1471.  0052h    "_CONFIGMG_Get_Hardware_Profile_Info"
  1472.  0053h    "_CONFIGMG_Register_Enumerator_Function"
  1473.  0054h    "_CONFIGMG_Call_Enumerator_Function"
  1474.  0055h    "_CONFIGMG_Add_ID"
  1475.  0056h    "_CONFIGMG_Find_Range"
  1476.  0057h    "_CONFIGMG_Get_Global_State"
  1477.  0058h    "_CONFIGMG_Broadcast_Device_Change_Message"
  1478.  0059h    "_CONFIGMG_Call_DevNode_Handler"
  1479.  005Ah    "_CONFIGMG_Remove_Reinsert_All"
  1480. Note:    the VxD services appear to be identical to the PM/V86 APIs on
  1481.       INT 2F/AX=1684h
  1482. SeeAlso: #01296,#01299,INT 2F/AX=1684h/BX=0033h
  1483. --------W-20----Vx0034-----------------------
  1484. INT 20 P - Microsoft Windows - DWCFGMG.SYS - VxD SERVICES
  1485.     VxD = 0034h
  1486. Note:    the desired VxD and service number are identified by the data
  1487.       immediately following the INT 20 instruction, as in:
  1488.         INT    20h
  1489.         DW    service number
  1490.         DW    VxD identifier
  1491. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1492.  
  1493. (Table 01298)
  1494. Values for DWCFGMG.SYS (VxD ID 0034h) service number:
  1495.  00h    "CM_GetVersion" get supported DDI version
  1496.     Return: EAX = 00000000h if not installed
  1497.         else
  1498.             AH = major version number
  1499.             AL = minor version number
  1500.             EBX = number of devices controlled by DWCFGMG.SYS
  1501.  01h    "CM_GetConfig" get device configuration
  1502.     EBX = device index
  1503.     EDI -> buffer for configuration information (see #02675)
  1504.     Return: EAX = status (0000h successful, 0001h index out of range)
  1505.  02h    "CM_LockConfig" lock device configuration
  1506.     EDI -> configuration information (see #02675)
  1507.     Return: EAX = status
  1508.             0000h successful
  1509.             0001h resource conflict
  1510.             0002h invalid request
  1511.  03h    "CM_UnlockConfig" unlock device configuration
  1512.     EDI -> configuration information (see #02675)
  1513.     Return: EAX = status (0000h successful, 0001h invalid request)
  1514.  04h    "CME_QueryResources"
  1515.  05h    "CME_AllocResources"
  1516.  06h    "CME_DeallocResources"
  1517. SeeAlso: INT 2F/AX=1684h/BX=0034h
  1518. --------W-20----Vx0036-----------------------
  1519. INT 20 P - Microsoft Windows - VFBACKUP - VxD SERVICES
  1520.     VxD = 0036h
  1521. Note:    the desired VxD and service number are identified by the data
  1522.       immediately following the INT 20 instruction, as in:
  1523.         INT    20h
  1524.         DW    service number
  1525.         DW    VxD identifier
  1526. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1527.  
  1528. (Table 01299)
  1529. Values for VFBACKUP (VxD ID 0036h) service number:
  1530.  0000h    get version
  1531.     Return: CF clear
  1532.         EAX = version (AH = major, AL = minor)
  1533.  0001h    "VFBACKUP_Lock_NEC"
  1534.  0002h    "VFBACKUP_UnLock_NEC"
  1535.  0003h    "VFBACKUP_Register_NEC"
  1536.  0004h    "VFBACKUP_Register_VFD"
  1537.  0005h    "VFBACKUP_Lock_All_Ports"
  1538. SeeAlso: #01297,#01300
  1539. --------W-20----Vx0037-----------------------
  1540. INT 20 P - Microsoft Windows - VMINI / ENABLE - VxD SERVICES
  1541.     VxD = 0037h
  1542. Note:    the desired VxD and service number are identified by the data
  1543.       immediately following the INT 20 instruction, as in:
  1544.         INT    20h
  1545.         DW    service number
  1546.         DW    VxD identifier
  1547. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1548.  
  1549. (Table 01300)
  1550. Values for VMINI / ENABLE (VxD ID 0037h) service number:
  1551.  0000h    get version
  1552.     Return: CF clear
  1553.         EAX = version (AH = major, AL = minor)
  1554.  0001h    "VMINI_Update"
  1555.     ??? (performs VMMCall 1800Eh, then falls through to service 04h)
  1556.     Return: EAX = system time???
  1557.  0002h    "VMINI_Status"
  1558.     get current ???
  1559.     Return: EAX = ???
  1560.  0003h    "VMINI_DisplayError" (schedules a global event via VMMCall 1800Eh)
  1561.     Return: ???
  1562.  0004h    "VMINI_SetTimeStamp" (performs VMMCall 100CFh)
  1563.     Return: EAX = system time
  1564.  0005h    "VMINI_Siren" (call ??? priority event)
  1565.     Return: nothing
  1566.  0006h    "VMINI_RegisterAccess" (set ??? / get ???)
  1567.     EDI -> buffer containing data to copy into VxD and space for results
  1568.     Return: EDI buffer updated
  1569.  0007h    "VMINI_GetData"
  1570.     EBX = ??? flags (bits 2,15,17,18 checked)
  1571.     EDI -> ???
  1572.     ???
  1573.     Return: ???
  1574.  0008h    "VMINI_ShutDownItem" (schedules a global event via VMMCall 1800Eh)
  1575.     Return: ???
  1576.  0009h    "VMINI_RegisterSK" (get ??? data)
  1577.     EDI -> buffer for data (see #01301)
  1578.     Return:    EDI buffer updated if large enough
  1579. SeeAlso: #01299,#01302,#02677 at INT 2F/AX=1684h/BX=0037h
  1580.  
  1581. Format of ENABLE.VXD ??? data:
  1582. Offset    Size    Description    (Table 01301)
  1583.  00h    DWORD    (ret) length of data, including this word
  1584.         (call) length of buffer
  1585.  04h    DWORD    -> 24-byte (or larger) buffer
  1586.  08h    DWORD    -> 20-byte buffer
  1587.  0Ch    DWORD    -> 260-byte buffer
  1588.  10h    DWORD    -> 260-byte buffer
  1589. SeeAlso: #01300
  1590. --------W-20----Vx0038-----------------------
  1591. INT 20 P - Microsoft Windows - VCOND - VxD SERVICES
  1592.     VxD = 0038h
  1593. Note:    the desired VxD and service number are identified by the data
  1594.       immediately following the INT 20 instruction, as in:
  1595.         INT    20h
  1596.         DW    service number
  1597.         DW    VxD identifier
  1598. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1599.  
  1600. (Table 01302)
  1601. Values for VCOND (VxD ID 0038h) service number:
  1602.  0000h    get VCOND version
  1603.     Return: CF clear
  1604.         EAX = version (AH = major, AL = minor)
  1605.  0001h    "VCOND_Launch_ConApp_Inherited"
  1606. SeeAlso: #01303,#01300,#01304
  1607.  
  1608. (Table 01303)
  1609. Values for Windows95 VCOND (Vxd ID 0038h) Win32 service number:
  1610.  00h    get VCOND version
  1611.     Return: EAX = version (AH = major, AL = minor)
  1612.  ...
  1613.  34h    ...last Win32 service for Windows95 SP1
  1614. SeeAlso: #01302
  1615. --------W-20----Vx003D-----------------------
  1616. INT 20 P - Microsoft Windows - BIOS - VxD SERVICES
  1617.     VxD = 003Dh
  1618. Note:    the desired VxD and service number are identified by the data
  1619.       immediately following the INT 20 instruction, as in:
  1620.         INT    20h
  1621.         DW    service number
  1622.         DW    VxD identifier
  1623. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1624.  
  1625. (Table 01304)
  1626. Values for BIOS (VxD ID 003Dh) service number:
  1627.  00h    get version???
  1628.  01h    ???
  1629.  02h    ???
  1630.  03h    ???
  1631. SeeAlso: #01302,#01305
  1632. --------W-20----Vx003E-----------------------
  1633. INT 20 P - Microsoft Windows - WSOCK - VxD SERVICES
  1634.     VxD = 003Eh
  1635. Note:    the desired VxD and service number are identified by the data
  1636.       immediately following the INT 20 instruction, as in:
  1637.         INT    20h
  1638.         DW    service number
  1639.         DW    VxD identifier
  1640. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1641.  
  1642. (Table 01305)
  1643. Values for WSOCK (VxD ID 003Eh) service number:
  1644.  00h    get WSOCK version
  1645.     Return: CF clear
  1646.         AH = major version
  1647.         AL = minor version
  1648.         EAX high word = 0000h
  1649.  01h    ???
  1650.     EAX = ??? or 00000000h
  1651.     Return: CF clear if successful
  1652.             EAX = 00000000h
  1653.         CF set on error
  1654.             EAX = ???
  1655.  02h    ???
  1656.     EAX = ??? or 00000000h
  1657.     Return: ???
  1658.  03h    ???
  1659.  04h    ...last service for Windows95 SP1
  1660. SeeAlso: #01304,#01306
  1661. --------W-20----Vx0040-----------------------
  1662. INT 20 P - Microsoft Windows - IFSMgr - VxD SERVICES
  1663.     VxD = 0040h
  1664. Note:    the desired VxD and service number are identified by the data
  1665.       immediately following the INT 20 instruction, as in:
  1666.         INT    20h
  1667.         DW    service number
  1668.         DW    VxD identifier
  1669. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1670.  
  1671. (Table 01306)
  1672. Values for IFSMGR (VxD ID 0040h) service number:
  1673.  00h    get version
  1674.  01h    "RegisterMount"
  1675.  02h    "RegisterNet"
  1676.  03h    "RegisterMailSlot"
  1677.  04h    "Attach"
  1678.  05h    "Detach"
  1679.  06h    "Get_NetTime"
  1680.  07h    "Get_DOSTime"
  1681.  08h    "SetupConnection"
  1682.  09h    "DerefConnection"
  1683.  0Ah    "ServerDOSCall"
  1684.  0Bh    "CompleteAsync"
  1685.  0Ch    "RegisterHeap"
  1686.  0Dh    "GetHeap"
  1687.  0Eh    "RetHeap"
  1688.  0Fh    "CheckHeap"
  1689.  10h    "CheckHeapItem"
  1690.  11h    "FillHeapSpare"
  1691.  12h    "Block"
  1692.  13h    "Wakeup"
  1693.  14h    "Yield"
  1694.  15h    "SchedEvent"
  1695.  16h    "QueueEvent"
  1696.  17h    "KillEvent"
  1697.  18h    "FreeIOReg"
  1698.  19h    "MakeMailSlot"
  1699.  1Ah    "DeleteMailSlot"
  1700.  1Bh    "WriteMailSlot"
  1701.  1Ch    "PopUp"
  1702.  1Dh    "printf"
  1703.  1Eh    "AssertFailed"
  1704.  1Fh    "LogEntry"
  1705.  20h    "DebugMenu"
  1706.  21h    "DebugVars"
  1707.  22h    "GetDebugString"
  1708.  23h    "GetDebugHexNum"
  1709.  24h    "NetFunction"
  1710.  25h    "DoDelAllUses"
  1711.  26h    "SetErrString"
  1712.  27h    "GetErrString"
  1713.  28h    "SetReqHook"
  1714.  29h    "SetPathHook"
  1715.  2Ah    "UseAdd"
  1716.  2Bh    "UseDel"
  1717.  2Ch    "InitUseAdd"
  1718.  2Dh    "ChangeDir"
  1719.  2Eh    "DelAllUses"
  1720.  2Fh    "CDROM_Attach"
  1721.  30h    "CDROM_Detach"
  1722.  31h    "Win32DupHandle"
  1723.  32h    "Ring0_FileIO"
  1724.  33h    "Toggle_Extended_File_Handle"
  1725.  34h    "IFSMgr_GetDrive_Info"
  1726.  35h    "IFSMgr_Ring0GetDriveInfo"
  1727.  36h    "IFSMgr_BlockNoEvents"
  1728.  37h    "IFSMgr_NetToDosTime"
  1729.  38h    "IFSMgr_DosToNetTime"
  1730.  39h    "IFSMgr_DosToWin32Time"
  1731.  3Ah    "IFSMgr_Win32ToDosTime"
  1732.  3Bh    "IFSMgr_NetToWin32Time"
  1733.  3Ch    "IFSMgr_Win32ToNetTime"
  1734.  3Dh    "IFSMgr_MetaMatch"
  1735.  3Eh    "IFSMgr_TransMatch"
  1736.  3Fh    "IFSMgr_CallProvider"
  1737.  40h    "UniToBCS"
  1738.  41h    "UniToBCSPath"
  1739.  42h    "BCSToUni"
  1740.  43h    "UniToUpper"
  1741.  44h    "UniCharToOEM"
  1742.  45h    "CreateBasis"
  1743.  46h    "MatchBasisName"
  1744.  47h    "AppendBasisTail"
  1745.  48h    "FcbToShort"
  1746.  49h    "ShortToFcb"
  1747.  4Ah    "IFSMgr_ParsePath"
  1748.  4Bh    "Query_PhysLock"
  1749.  4Ch    "_VolFlush"
  1750.  4Dh    "NotifyVolumeArrival"
  1751.  4Eh    "NotifyVolumeRemoval"
  1752.  4Fh    "QueryVolumeRemoval"
  1753.  50h    "IFSMgr_FSDUnmountCFSD"
  1754.  51h    "IFSMgr_GetConversionTablePtrs"
  1755.  52h    "IFSMgr_CheckAccessConflict"
  1756.  53h    "IFSMgr_LockFile"
  1757.  54h    "IFSMgr_UnlockFile"
  1758.  55h    "IFSMgr_RemoveLocks"
  1759.  56h    "IFSMgr_CheckLocks"
  1760.  57h    "IFSMgr_CountLocks"
  1761.  58h    "IFSMgr_ReassignLockFileInst"
  1762.  59h    "IFSMgr_UnassignLockList"
  1763.  5Ah    "IFSMgr_MountChildVolume"
  1764.  5Bh    "IFSMgr_UnmountChildVolume"
  1765.  5Ch    "IFSMgr_SwapDrives"
  1766.  5Dh    "IFSMgr_FSDMapFHtoIOREQ"
  1767.  5Eh    "IFSMgr_FSDParsePath"
  1768.  5Fh    "IFSMgr_FSDAttachSFT"
  1769.  60h    "IFSMgr_GetTimeZoneBias"
  1770.  61h    "IFSMgr_PNPEvent"
  1771.  62h    "IFSMgr_RegisterCFSD"
  1772.  63h    "IFSMgr_Win32MapExtendedHandleToSFT"
  1773.  64h    "IFSMgr_DbgSetFileHandleLimit"
  1774.  65h    "IFSMgr_Win32MapSFTToExtendedHandle"
  1775.  66h    "IFSMgr_FSDGetCurrentDrive"
  1776.  67h    "IFSMgr_InstallFileSystemApiHook"
  1777.  68h    "IFSMgr_RemoveFileSystemApiHook"
  1778.  69h    "IFSMgr_RunScheduledEvents"
  1779.  6Ah    "IFSMgr_CheckDelResource"
  1780.  6Bh    "IFSMgr_Win32GetVMCurdir"
  1781.  6Ch    "IFSMgr_SetupFailedConnection"
  1782.  6Dh    "_GetMappedErr"
  1783.  6Eh    "ShortToLossyFcb"
  1784.  6Fh    "IFSMgr_GetLockState"
  1785.  70h    "BcsToBcs"
  1786.  71h    "IFSMgr_SetLoopback"
  1787.  72h    "IFSMgr_ClearLoopback"
  1788.  73h    "IFSMgr_ParseOneElement"
  1789.  74h    "BcsToBcsUpper"
  1790. SeeAlso: #01305,#01307
  1791. --------W-20----Vx0041-----------------------
  1792. INT 20 P - Microsoft Windows - VCDFSD - VxD SERVICES
  1793.     VxD = 0041h
  1794. Note:    the desired VxD and service number are identified by the data
  1795.       immediately following the INT 20 instruction, as in:
  1796.         INT    20h
  1797.         DW    service number
  1798.         DW    VxD identifier
  1799. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1800.  
  1801. (Table 01307)
  1802. Values for VCDFSD (VxD ID 0041h) service number:
  1803.  00h    get VCDFSD version???
  1804.  01h    ???
  1805.  02h    ???
  1806.  03h    ???
  1807. SeeAlso: #01306,#01308
  1808. --------W-20----Vx0048-----------------------
  1809. INT 20 P - Microsoft Windows - PERF - VxD SERVICES
  1810.     VxD = 0048h
  1811. Note:    the desired VxD and service number are identified by the data
  1812.       immediately following the INT 20 instruction, as in:
  1813.         INT    20h
  1814.         DW    service number
  1815.         DW    VxD identifier
  1816. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1817.  
  1818. (Table 01308)
  1819. Values for PERF (VxD ID 0048h) service number:
  1820.  00h    get version
  1821.     Return: CF clear
  1822.         EAX = version (AH = major, AL = minor)
  1823.  01h    "PERF_Server_Register"
  1824.     (creates/sets a registry key for the server)
  1825.  02h    "PERF_Server_Deregister"
  1826.     end performance monitoring (deletes registry key for server)
  1827.  03h    "PERF_Server_Add_Stat"
  1828.     start performance monitoring (creates/sets a registry key)
  1829.  04h    "PERF_Server_Remove_Stat"
  1830.     end performance monitoring (deletes registry key)
  1831. SeeAlso: #01307,#01311,#01309
  1832. --------W-20----Vx004A-----------------------
  1833. INT 20 P - Microsoft Windows - MTRR - VxD SERVICES
  1834.     VxD = 004Ah
  1835. Note:    the desired VxD and service number are identified by the data
  1836.       immediately following the INT 20 instruction, as in:
  1837.         INT    20h
  1838.         DW    service number
  1839.         DW    VxD identifier
  1840. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1841.  
  1842. (Table 01309)
  1843. Values for MTRR (VxD ID 004Ah) service number:
  1844.  00h    get version
  1845.  01h    ??? (highest service defined for Win95B)
  1846. SeeAlso: #01308,#01310
  1847. --------W-20----Vx004B-----------------------
  1848. INT 20 P - Microsoft Windows - NTKERN - VxD SERVICES
  1849.     VxD = 004Bh
  1850. Note:    the desired VxD and service number are identified by the data
  1851.       immediately following the INT 20 instruction, as in:
  1852.         INT    20h
  1853.         DW    service number
  1854.         DW    VxD identifier
  1855. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1856.  
  1857. (Table 01310)
  1858. Values for NTKERN (VxD ID 004Bh) service number:
  1859.  00h    get version???
  1860.  ...
  1861.  08h    ??? (highest service defined for Win95B)
  1862. SeeAlso: #01309,#01311
  1863. --------W-20----Vx011F-----------------------
  1864. INT 20 P - Microsoft Windows - VFLATD - VxD SERVICES
  1865.     VxD = 011Fh
  1866. Note:    the desired VxD and service number are identified by the data
  1867.       immediately following the INT 20 instruction, as in:
  1868.         INT    20h
  1869.         DW    service number
  1870.         DW    VxD identifier
  1871. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1872.  
  1873. (Table 01311)
  1874. Values for VFLATD (VxD ID 011Fh) service number:
  1875.  00h    get VFLATD version???
  1876.  01h    ???
  1877. SeeAlso: #01308,#01312
  1878. --------W-20----Vx0449-----------------------
  1879. INT 20 P - Microsoft Windows - vjoyd - VxD SERVICES
  1880.     VxD = 0449h
  1881. Note:    the desired VxD and service number are identified by the data
  1882.       immediately following the INT 20 instruction, as in:
  1883.         INT    20h
  1884.         DW    service number
  1885.         DW    VxD identifier
  1886. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1887.  
  1888. (Table 01312)
  1889. Values for vjoyd (VxD ID 0449h) service number:
  1890.  00h    get vjoyd version???
  1891.  01h    ???
  1892. SeeAlso: #01311,#01313
  1893. --------W-20----Vx044A-----------------------
  1894. INT 20 P - Microsoft Windows - mmdevldr - VxD SERVICES
  1895.     VxD = 044Ah
  1896. Note:    the desired VxD and service number are identified by the data
  1897.       immediately following the INT 20 instruction, as in:
  1898.         INT    20h
  1899.         DW    service number
  1900.         DW    VxD identifier
  1901. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1902.  
  1903. (Table 01313)
  1904. Values for mmdevldr (VxD ID 044Ah) service number:
  1905.  00h    get mmdevldr version???
  1906.  01h    ???
  1907.  02h    ???
  1908.  03h    ???
  1909.  04h    ???
  1910.  05h    ???
  1911. SeeAlso: #01312,#01314
  1912. --------W-20----Vx0480-----------------------
  1913. INT 20 P - Microsoft Windows - VNetSup - VxD SERVICES
  1914.     VxD = 0480h
  1915. Note:    the desired VxD and service number are identified by the data
  1916.       immediately following the INT 20 instruction, as in:
  1917.         INT    20h
  1918.         DW    service number
  1919.         DW    VxD identifier
  1920. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1921.  
  1922. (Table 01314)
  1923. Values for VNetSup (VxD ID 0480h) service number:
  1924.  00h    get VNetSup version???
  1925.  01h    ???
  1926.  02h    ???
  1927.  03h    ???
  1928.  04h    ???
  1929.  05h    ???
  1930.  06h    ???
  1931. SeeAlso: #01313,#01315
  1932. --------W-20----Vx0481-----------------------
  1933. INT 20 P - Microsoft Windows - VREDIR - VxD SERVICES
  1934.     VxD = 0481h
  1935. Note:    the desired VxD and service number are identified by the data
  1936.       immediately following the INT 20 instruction, as in:
  1937.         INT    20h
  1938.         DW    service number
  1939.         DW    VxD identifier
  1940. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1941.  
  1942. (Table 01315)
  1943. Values for VREDIR (VxD ID 0481h) service number:
  1944.  0000h    "VRedir_Get_Version"
  1945.  0001h    "VRedir_Register"
  1946.  0002h    "VRedir_MakeMailSlot"
  1947.  0003h    "VRedir_DeleteMailSlot"
  1948.  0004h    "VRedir_ServerEnum"
  1949.  0010h    ...last service for Windows95 SP1
  1950. SeeAlso: #01314,#01316
  1951. --------W-20----Vx0483-----------------------
  1952. INT 20 P - Microsoft Windows - VSHARE - VxD SERVICES
  1953.     VxD = 0483h
  1954. Note:    the desired VxD and service number are identified by the data
  1955.       immediately following the INT 20 instruction, as in:
  1956.         INT    20h
  1957.         DW    service number
  1958.         DW    VxD identifier
  1959. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1960.  
  1961. (Table 01316)
  1962. Values for VSHARE (VxD ID 0483h) service number:
  1963.  00h    get VSHARE version???
  1964. SeeAlso: #01315,#01317
  1965. --------W-20----Vx0487-----------------------
  1966. INT 20 P - Microsoft Windows - NWLINK - VxD SERVICES
  1967.     VxD = 0487h
  1968. Note:    the desired VxD and service number are identified by the data
  1969.       immediately following the INT 20 instruction, as in:
  1970.         INT    20h
  1971.         DW    service number
  1972.         DW    VxD identifier
  1973. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1974.  
  1975. (Table 01317)
  1976. Values for NWLINK (VxD ID 0487h) service number:
  1977.  00h    get NWLINK version???
  1978.  01h    ???
  1979.  06h    ...last service for Windows95 SP1
  1980. SeeAlso: #01316,#01318,#02642
  1981. --------W-20----Vx0488-----------------------
  1982. INT 20 P - Microsoft Windows - VTDI - VxD SERVICES
  1983.     VxD = 0488h
  1984. Note:    the desired VxD and service number are identified by the data
  1985.       immediately following the INT 20 instruction, as in:
  1986.         INT    20h
  1987.         DW    service number
  1988.         DW    VxD identifier
  1989. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  1990.  
  1991. (Table 01318)
  1992. Values for VTDI (VxD ID 0488h) service number:
  1993.  00h    get VTDI version???
  1994.  01h    ???
  1995.  08h    get ???
  1996.     seen called with DWORD -> ASCIZ "MSTCP" on stack, returning EAX=???
  1997.  0Dh    ...last service for Windows95 SP1
  1998. SeeAlso: #01317,#01319
  1999. --------W-20----Vx0489-----------------------
  2000. INT 20 P - Microsoft Windows - VIP - VxD SERVICES
  2001.     VxD = 0489h
  2002. Note:    the desired VxD and service number are identified by the data
  2003.       immediately following the INT 20 instruction, as in:
  2004.         INT    20h
  2005.         DW    service number
  2006.         DW    VxD identifier
  2007. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2008.  
  2009. (Table 01319)
  2010. Values for VIP (VxD ID 0489h) service number:
  2011.  00h    get VIP version???
  2012.  01h    ???
  2013.  05h    ???
  2014.  06h    ???
  2015.     returns EAX=0/1
  2016.  08h    ...last service for Windows95 SP1
  2017. ---Frontier Technologies' FTCVIP---
  2018.  09h    ???
  2019.     returns EAX=1
  2020. SeeAlso: #01318,#01320
  2021. --------W-20----Vx048A-----------------------
  2022. INT 20 P - Microsoft Windows - MSTCP - VxD SERVICES
  2023.     VxD = 048Ah
  2024. Note:    the desired VxD and service number are identified by the data
  2025.       immediately following the INT 20 instruction, as in:
  2026.         INT    20h
  2027.         DW    service number
  2028.         DW    VxD identifier
  2029. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2030.  
  2031. (Table 01320)
  2032. Values for MSTCP (VxD ID 048Ah) service number:
  2033.  00h    get MSTCP version???
  2034. SeeAlso: #01319,#01321
  2035. --------W-20----Vx048B-----------------------
  2036. INT 20 P - Microsoft Windows - VCACHE - VxD SERVICES
  2037.     VxD = 048Bh
  2038. Note:    the desired VxD and service number are identified by the data
  2039.       immediately following the INT 20 instruction, as in:
  2040.         INT    20h
  2041.         DW    service number
  2042.         DW    VxD identifier
  2043. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2044.  
  2045. (Table 01321)
  2046. Values for VCACHE (VxD ID 048Bh) service number:
  2047.  0000h    "VCACHE_Get_Version"
  2048.  0001h    "VCACHE_Register"
  2049.  0002h    "VCACHE_GetSize"
  2050.  0003h    "VCACHE_CheckAvail"
  2051.  0004h    "VCACHE_FindBlock"
  2052.  0005h    "VCACHE_FreeBlock"
  2053.  0006h    "VCACHE_MakeMRU"
  2054.  0007h    "VCACHE_Hold"
  2055.  0008h    "VCACHE_Unhold"
  2056.  0009h    "VCACHE_Enum"
  2057.  000Ah    "VCACHE_TestHandle"
  2058.  000Bh    "VCACHE_VerifySums"
  2059.  000Ch    "VCACHE_RecalcSums"
  2060.  000Dh    "VCACHE_TestHold"
  2061.  000Eh    "VCACHE_GetStats"
  2062.  000Fh    "VCache_Deregister"
  2063.  0010h    "VCache_AdjustMinimum"
  2064.  0011h    "VCache_SwapBuffers"
  2065.  0012h    "VCache_RelinquishPage"
  2066.  0013h    "VCache_UseThisPage"
  2067.  0014h    "_VCache_CreateLookupCache"
  2068.  0015h    "_VCache_CloseLookupCache"
  2069.  0016h    "_VCache_DeleteLookupCache"
  2070.  0017h    "_VCache_Lookup"
  2071.  0018h    "_VCache_UpdateLookup"
  2072. SeeAlso: #01320,#01322
  2073. --------W-20----Vx048E-----------------------
  2074. INT 20 P - Microsoft Windows - NWREDIR - VxD SERVICES
  2075.     VxD = 048Eh
  2076. Note:    the desired VxD and service number are identified by the data
  2077.       immediately following the INT 20 instruction, as in:
  2078.         INT    20h
  2079.         DW    service number
  2080.         DW    VxD identifier
  2081. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2082.  
  2083. (Table 01322)
  2084. Values for NWREDIR (VxD ID 048Eh) service number:
  2085.  00h    get NWREDIR version???
  2086.  01h    ???
  2087. SeeAlso: #01321,#01323
  2088. --------W-20----Vx0491-----------------------
  2089. INT 20 P - Microsoft Windows - FILESEC - VxD SERVICES
  2090.     VxD = 0491h
  2091. Note:    the desired VxD and service number are identified by the data
  2092.       immediately following the INT 20 instruction, as in:
  2093.         INT    20h
  2094.         DW    service number
  2095.         DW    VxD identifier
  2096. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2097.  
  2098. (Table 01323)
  2099. Values for FILESEC (VxD ID 0491h) service number:
  2100.  00h    get FILESEC version???
  2101.  01h    ???
  2102.  10h    ...last service for Windows95 SP1
  2103. SeeAlso: #01322,#01324
  2104. --------W-20----Vx0492-----------------------
  2105. INT 20 P - Microsoft Windows - NWSERVER - VxD SERVICES
  2106.     VxD = 0492h
  2107. Note:    the desired VxD and service number are identified by the data
  2108.       immediately following the INT 20 instruction, as in:
  2109.         INT    20h
  2110.         DW    service number
  2111.         DW    VxD identifier
  2112. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2113.  
  2114. (Table 01324)
  2115. Values for NWSERVER (VxD ID 0492h) service number:
  2116.  00h    get NWSERVER version???
  2117.  01h    ???
  2118.  02h    ???
  2119.  03h    ???
  2120. SeeAlso: #01323,#01325
  2121. --------W-20----Vx0493-----------------------
  2122. INT 20 P - Microsoft Windows - MSSP / NWSP - VxD SERVICES
  2123.     VxD = 0493h
  2124. Note:    the desired VxD and service number are identified by the data
  2125.       immediately following the INT 20 instruction, as in:
  2126.         INT    20h
  2127.         DW    service number
  2128.         DW    VxD identifier
  2129. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2130.  
  2131. (Table 01325)
  2132. Values for MSSP/NWSP (VxD ID 0493h) service number:
  2133.  00h    get NSSP / NWSP version???
  2134.  01h    ???
  2135.  06h    ...last service for Windows95 SP1
  2136. SeeAlso: #01324,#01326
  2137. --------W-20----Vx0494-----------------------
  2138. INT 20 P - Microsoft Windows - NSCL - VxD SERVICES
  2139.     VxD = 0494h
  2140. Note:    the desired VxD and service number are identified by the data
  2141.       immediately following the INT 20 instruction, as in:
  2142.         INT    20h
  2143.         DW    service number
  2144.         DW    VxD identifier
  2145. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2146.  
  2147. (Table 01326)
  2148. Values for NSCL (VxD ID 0494h)    service number:
  2149.  00h    get NSCL version???
  2150.  01h    ???
  2151.  02h    ???
  2152. SeeAlso: #01325,#01327
  2153. --------W-20----Vx0495-----------------------
  2154. INT 20 P - Microsoft Windows - AFVXD - VxD SERVICES
  2155.     VxD = 0495h
  2156. Note:    the desired VxD and service number are identified by the data
  2157.       immediately following the INT 20 instruction, as in:
  2158.         INT    20h
  2159.         DW    service number
  2160.         DW    VxD identifier
  2161. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2162.  
  2163. (Table 01327)
  2164. Values for AFVXD (VxD ID 0495h) service number:
  2165.  00h    get version
  2166.     Return: CF clear
  2167.         AX = version (AH = high, AL = low)
  2168.  01h    ???
  2169.     EAX -> ???
  2170.     EBX -> ???
  2171.     ECX = ???
  2172.     Return:    ???
  2173.  02h    ???
  2174.     EAX -> ???
  2175.     Return: ???
  2176. SeeAlso: #01326,#01328
  2177. --------W-20----Vx0496-----------------------
  2178. INT 20 P - Microsoft Windows - NDIS2SUP - VxD SERVICES
  2179.     VxD = 0496h
  2180. Note:    the desired VxD and service number are identified by the data
  2181.       immediately following the INT 20 instruction, as in:
  2182.         INT    20h
  2183.         DW    service number
  2184.         DW    VxD identifier (see #02642)
  2185. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2186.  
  2187. (Table 01328)
  2188. Values for NDIS2SUP (VxD ID 0496h) service number:
  2189.  00h    get NDIS2SUP version???
  2190.  01h    ???
  2191. SeeAlso: #01327,#01329
  2192. --------W-20----Vx0498-----------------------
  2193. INT 20 P - Microsoft Windows - Splitter - VxD SERVICES
  2194.     VxD = 0498h
  2195. Note:    the desired VxD and service number are identified by the data
  2196.       immediately following the INT 20 instruction, as in:
  2197.         INT    20h
  2198.         DW    service number
  2199.         DW    VxD identifier (see #02642)
  2200. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2201.  
  2202. (Table 01329)
  2203. Values for Splitter (VxD ID 0498h) service number:
  2204.  00h    get Splitter version
  2205.     Return:    CF clear
  2206.         EAX = version (00000001h)
  2207.  01h    ???
  2208.  02h    ???
  2209.  03h    hook/unhook VMM "hook device service" service
  2210.     EAX = request (0 = unhook, nonzero = hook)
  2211.     Return: if EAX nonzero on entry, Splitter's service 04h replaces VMM
  2212.           service 0090h; otherwise, default handler is restored
  2213.  04h    Splitter "hook device service" handler
  2214. SeeAlso: #01328,#01330
  2215. --------W-20----Vx0499-----------------------
  2216. INT 20 P - Microsoft Windows - PPPMAC - VxD SERVICES
  2217.     VxD = 0499h
  2218. Note:    the desired VxD and service number are identified by the data
  2219.       immediately following the INT 20 instruction, as in:
  2220.         INT    20h
  2221.         DW    service number
  2222.         DW    VxD identifier (see #02642)
  2223. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2224.  
  2225. (Table 01330)
  2226. Values for PPPMAC (VxD ID 0499h) service number:
  2227.  00h    ???
  2228.  09h    ...last service for Windows95 SP1
  2229. SeeAlso: #01329,#01331,#02642
  2230. --------W-20----Vx049A-----------------------
  2231. INT 20 P - Microsoft Windows - VDHCP - VxD SERVICES
  2232.     VxD = 049Ah
  2233. Note:    the desired VxD and service number are identified by the data
  2234.       immediately following the INT 20 instruction, as in:
  2235.         INT    20h
  2236.         DW    service number
  2237.         DW    VxD identifier (see #02642)
  2238. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2239.  
  2240. (Table 01331)
  2241. Values for VDHCP (VxD ID 049Ah) service number:
  2242.  00h    get VDHCP version???
  2243.  01h    ???
  2244.  02h    ???
  2245.  03h    ???
  2246. SeeAlso: #01330,#01332
  2247. --------W-20----Vx049B-----------------------
  2248. INT 20 P - Microsoft Windows - VNBT - VxD SERVICES
  2249.     VxD = 049Bh
  2250. Note:    the desired VxD and service number are identified by the data
  2251.       immediately following the INT 20 instruction, as in:
  2252.         INT    20h
  2253.         DW    service number
  2254.         DW    VxD identifier (see #02642)
  2255. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2256.  
  2257. (Table 01332)
  2258. Values for VNBT (VxD ID 049Bh) service number:
  2259.  00h    get VNBT version???
  2260. SeeAlso: #01331,#01333
  2261. --------W-20----Vx049D-----------------------
  2262. INT 20 P - Microsoft Windows - LOGGER - VxD SERVICES
  2263.     VxD = 049Dh
  2264. Note:    the desired VxD and service number are identified by the data
  2265.       immediately following the INT 20 instruction, as in:
  2266.         INT    20h
  2267.         DW    service number
  2268.         DW    VxD identifier (see #02642)
  2269. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2270.  
  2271. (Table 01333)
  2272. Values for LOGGER (VxD ID 049Dh) service number:
  2273.  00h    get LOGGER version???
  2274.  01h    ???
  2275.  02h    ???
  2276.  03h    ???
  2277.  04h    ???
  2278. SeeAlso: #01332,#01334
  2279. --------W-20----Vx097C-----------------------
  2280. INT 20 P - Microsoft Windows - PCCARD - VxD SERVICES
  2281.     VxD = 097Ch
  2282. Note:    the desired VxD and service number are identified by the data
  2283.       immediately following the INT 20 instruction, as in:
  2284.         INT    20h
  2285.         DW    service number
  2286.         DW    VxD identifier (see #02642)
  2287. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01334,#01340
  2288.  
  2289. (Table 01334)
  2290. Values for PCCARD (VxD ID 097Ch) service number:
  2291.  0000h    "PCCARD_Get_Version"
  2292.  0001h    "PCCARD_Card_Services"
  2293. SeeAlso: #01333,#01337
  2294. ----------20----Vx3048-----------------------
  2295. INT 20 P - Frontier Technologies ??? - VxD SERVICES
  2296.     VxD = 3048h
  2297. Note:    the desired VxD and service number are identified by the data
  2298.       immediately following the INT 20 instruction, as in:
  2299.         INT    20h
  2300.         DW    service number
  2301.         DW    VxD identifier
  2302. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01335
  2303.  
  2304. (Table 01335)
  2305. Values for ??? (VxD ID 3048h) service number:
  2306.  00h    get version???
  2307.  03h    ???
  2308.     called with 5 DWORDs on stack, returns EAX=???, ECX nonzero on error
  2309.  04h    ???
  2310.     called with DWORD on stack, returns EAX=???, ECX nonzero on error
  2311.  06h    ???
  2312.     called with DWORD on stack, returns EAX=???, ECX nonzero on error
  2313.  07h    ???
  2314.     called with 3 DWORDs on stack, returns EAX=???, ECX nonzero on error
  2315.  0Bh    ???
  2316.     called with 2 DWORDs on stack, returns EAX=???, ECX nonzero on error
  2317.  0Ch    ???
  2318.     called with 2 DWORDs on stack, returns EAX=???, ECX nonzero on error
  2319.  0Dh    ???
  2320.     called with 6 DWORDs on stack, returns EAX=???, ECX nonzero on error
  2321.  1Ah    ???
  2322.     called with 3 DWORDs on stack
  2323. SeeAlso: #01336
  2324. ----------20----Vx3049-----------------------
  2325. INT 20 P - Frontier Technologies ??? - VxD SERVICES
  2326.     VxD = 3049h
  2327. Note:    the desired VxD and service number are identified by the data
  2328.       immediately following the INT 20 instruction, as in:
  2329.         INT    20h
  2330.         DW    service number
  2331.         DW    VxD identifier
  2332. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01336
  2333.  
  2334. (Table 01336)
  2335. Values for ??? (VxD ID 3049h) service number:
  2336.  00h    get version???
  2337.  1Dh    ???
  2338.     called with 2 DWORDs on stack; returns EAX=???, ECX nonzero on error
  2339.  1Eh    ???
  2340.     called with 6 DWORDs on stack; returns EAX=???, ECX nonzero on error
  2341. SeeAlso: #01335
  2342. --------W-20----Vx3098-----------------------
  2343. INT 20 P - QEMM - VstlthD - VxD SERVICES
  2344.     VxD = 3098h
  2345. Note:    the desired VxD and service number are identified by the data
  2346.       immediately following the INT 20 instruction, as in:
  2347.         INT    20h
  2348.         DW    service number
  2349.         DW    VxD identifier
  2350. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2351.  
  2352. (Table 01337)
  2353. Values for VStlthD (VxD ID 3098h) service number:
  2354.  00h    get version
  2355.     Return:    CF clear
  2356.         EAX = version (AH = major, AL = BCD minor)
  2357.  01h    ???
  2358.  02h    get current ???
  2359.     Return: CF clear
  2360.         EDX = current value of ???
  2361.  03h    ???
  2362. SeeAlso: #01334,#01338
  2363. --------W-20----Vx30F6-----------------------
  2364. INT 20 P - Microsoft Windows - WSVV - VxD SERVICES
  2365.     VxD = 30F6h
  2366. Note:    the desired VxD and service number are identified by the data
  2367.       immediately following the INT 20 instruction, as in:
  2368.         INT    20h
  2369.         DW    service number
  2370.         DW    VxD identifier
  2371. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2372.  
  2373. (Table 01338)
  2374. Values for WSVV (VxD ID 30F6h) service number:
  2375.  00h    get WSVV version???
  2376. SeeAlso: #01337,#01339
  2377. --------W-20----Vx33FC-----------------------
  2378. INT 20 P - Microsoft Windows - APSIENUM - VxD SERVICES
  2379.     VxD = 33FCh
  2380. Note:    the desired VxD and service number are identified by the data
  2381.       immediately following the INT 20 instruction, as in:
  2382.         INT    20h
  2383.         DW    service number
  2384.         DW    VxD identifier
  2385. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2386.  
  2387. (Table 01339)
  2388. Values for ASPIENUM (VxD ID 33FCh) service number:
  2389.  00h    get ASPIENUM version???
  2390.  01h    ???
  2391.  02h    ???
  2392.  03h    ???
  2393. SeeAlso: #01338,#01340
  2394. --------W-20----Vx357E-----------------------
  2395. INT 20 P - Microsoft Windows - DSOUND - VxD SERVICES
  2396.     VxD = 357Eh
  2397. Note:    the desired VxD and service number are identified by the data
  2398.       immediately following the INT 20 instruction, as in:
  2399.         INT    20h
  2400.         DW    service number
  2401.         DW    VxD identifier
  2402. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2403.  
  2404. (Table 01340)
  2405. Values for DSOUND (VxD ID 357Eh) service number:
  2406.  00h    get DSOUND version???
  2407.  01h    ???
  2408.  02h    ???
  2409. SeeAlso: #01339,#01341
  2410. --------W-20----Vx39E6-----------------------
  2411. INT 20 P - Microsoft Windows - A3D - VxD SERVICES
  2412.     VxD = 39E6h
  2413. Note:    the desired VxD and service number are identified by the data
  2414.       immediately following the INT 20 instruction, as in:
  2415.         INT    20h
  2416.         DW    service number
  2417.         DW    VxD identifier
  2418. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2419.  
  2420.  
  2421. (Table 01341)
  2422. Values for A3D (VxD ID 39E6h) service number:
  2423.  00h    get version???
  2424.  01h    ???
  2425.  02h    ??? (highest service defined)
  2426. SeeAlso: #01340,#01342
  2427. --------W-20----Vx3BFD-----------------------
  2428. INT 20 P - Microsoft Windows - CWCPROXY - VxD SERVICES
  2429.     VxD = 3BFDh
  2430. Note:    the desired VxD and service number are identified by the data
  2431.       immediately following the INT 20 instruction, as in:
  2432.         INT    20h
  2433.         DW    service number
  2434.         DW    VxD identifier
  2435. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2436.  
  2437. (Table 01342)
  2438. Values for CWCPROXY (VxD ID 3BFDh) service number:
  2439.  00h    get version???
  2440.  ...
  2441.  03h    ??? (highest service defined)
  2442. SeeAlso: #01341,#01343
  2443. --------W-20----Vx3C78-----------------------
  2444. INT 20 P - Microsoft Windows - VGARTD - VxD SERVICES
  2445.     VxD = 3C78h
  2446. Note:    the desired VxD and service number are identified by the data
  2447.       immediately following the INT 20 instruction, as in:
  2448.         INT    20h
  2449.         DW    service number
  2450.         DW    VxD identifier
  2451. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#01265,#01340
  2452.  
  2453. (Table 01343)
  2454. Values for VGARTD (VxD ID 3C78h) service number:
  2455.  00h    get version???
  2456.  ...
  2457.  05h    ??? (highest service defined)
  2458. SeeAlso: #01342,#02642
  2459. --------G-21---------------------------------
  2460. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  2461.     ???
  2462. Return: AX = first segment available for control program use
  2463. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  2464. --------D-2100-------------------------------
  2465. INT 21 - DOS 1+ - TERMINATE PROGRAM
  2466.     AH = 00h
  2467.     CS = PSP segment
  2468. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  2469.     this function sets the program's return code (ERRORLEVEL) to 00h
  2470.     execution continues at the address stored in INT 22 after DOS performs
  2471.       whatever cleanup it needs to do (restoring the INT 22,INT 23,INT 24
  2472.       vectors from the PSP assumed to be located at offset 0000h in the
  2473.       segment indicated by the stack copy of CS, etc.)
  2474.     if the PSP is its own parent, the process's memory is not freed; if
  2475.       INT 22 additionally points into the terminating program, the
  2476.       process is effectively NOT terminated
  2477.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2478. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  2479. --------D-2101-------------------------------
  2480. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  2481.     AH = 01h
  2482. Return: AL = character read
  2483. Notes:    ^C/^Break are checked, and INT 23 executed if read
  2484.     ^P toggles the DOS-internal echo-to-printer flag
  2485.     ^Z is not interpreted, thus not causing an EOF if input is redirected
  2486.     character is echoed to standard output
  2487.     standard input is always the keyboard and standard output the screen
  2488.       under DOS 1.x, but they may be redirected under DOS 2+
  2489. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  2490. --------v-21010F-----------------------------
  2491. INT 21 - VIRUS - "Susan" - INSTALLATION CHECK
  2492.     AX = 010Fh
  2493. Return: AX = 7553h ("Su") if resident
  2494. SeeAlso: INT 16/AH=DDh"VIRUS",INT 21/AX=0B56h
  2495. --------D-2102-------------------------------
  2496. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  2497.     AH = 02h
  2498.     DL = character to write
  2499. Return: AL = last character output (despite the official docs which state
  2500.         nothing is returned) (at least DOS 2.1-7.0)
  2501. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  2502.     standard output is always the screen under DOS 1.x, but may be
  2503.       redirected under DOS 2+
  2504.     the last character output will be the character in DL unless DL=09h
  2505.       on entry, in which case AL=20h as tabs are expanded to blanks
  2506.     if standard output is redirected to a file, no error checks (write-
  2507.       protected, full media, etc.) are performed
  2508. SeeAlso: AH=06h,AH=09h
  2509. --------D-2103-------------------------------
  2510. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  2511.     AH = 03h
  2512. Return: AL = character read
  2513. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2514.     STDAUX is usually the first serial port
  2515. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  2516. --------D-2104-------------------------------
  2517. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  2518.     AH = 04h
  2519.     DL = character to write
  2520. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2521.     STDAUX is usually the first serial port
  2522.     if STDAUX is busy, this function will wait until it becomes free
  2523. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  2524. --------D-2105-------------------------------
  2525. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  2526.     AH = 05h
  2527.     DL = character to print
  2528. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  2529.     STDPRN is usually the first parallel port, but may be redirected under
  2530.       DOS 2+
  2531.     if the printer is busy, this function will wait
  2532. SeeAlso: INT 17/AH=00h
  2533. --------D-2106-------------------------------
  2534. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  2535.     AH = 06h
  2536.     DL = character (except FFh)
  2537. Return: AL = character output (despite official docs which state nothing is
  2538.         returned) (at least DOS 2.1-7.0)
  2539. Notes:    does not check ^C/^Break
  2540.     writes to standard output, which is always the screen under DOS 1.x,
  2541.       but may be redirected under DOS 2+
  2542. SeeAlso: AH=02h,AH=09h
  2543. --------D-2106--DLFF-------------------------
  2544. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  2545.     AH = 06h
  2546.     DL = FFh
  2547. Return: ZF set if no character available
  2548.         AL = 00h
  2549.     ZF clear if character available
  2550.         AL = character read
  2551. Notes:    ^C/^Break are NOT checked
  2552.     if the returned character is 00h, the user pressed a key with an
  2553.       extended keycode, which will be returned by the next call of this
  2554.       function
  2555.     this function reads from standard input, which is always the keyboard
  2556.       under DOS 1.x, but may be redirected under DOS 2+
  2557.     although the return of AL=00h when no characters are available is not
  2558.       documented, some programs rely on this behavior
  2559. SeeAlso: AH=0Bh
  2560. --------D-2107-------------------------------
  2561. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  2562.     AH = 07h
  2563. Return: AL = character read from standard input
  2564. Notes:    does not check ^C/^Break
  2565.     standard input is always the keyboard under DOS 1.x, but may be
  2566.       redirected under DOS 2+
  2567.     if the interim console flag is set (see AX=6301h), partially-formed
  2568.       double-byte characters may be returned
  2569. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  2570. --------D-2108-------------------------------
  2571. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  2572.     AH = 08h
  2573. Return: AL = character read from standard input
  2574. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  2575.     standard input is always the keyboard under DOS 1.x, but may be
  2576.       redirected under DOS 2+
  2577.     if the interim console flag is set (see AX=6301h), partially-formed
  2578.       double-byte characters may be returned
  2579. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h"DOS 3.2+"
  2580. --------D-2109-------------------------------
  2581. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  2582.     AH = 09h
  2583.     DS:DX -> '$'-terminated string
  2584. Return: AL = 24h (the '$' terminating the string, despite official docs which
  2585.         state that nothing is returned) (at least DOS 2.1-7.0 and
  2586.         NWDOS)
  2587. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  2588.     standard output is always the screen under DOS 1.x, but may be
  2589.       redirected under DOS 2+
  2590.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  2591. SeeAlso: AH=02h,AH=06h"OUTPUT"
  2592. --------D-210A-------------------------------
  2593. INT 21 - DOS 1+ - BUFFERED INPUT
  2594.     AH = 0Ah
  2595.     DS:DX -> buffer (see #01344)
  2596. Return: buffer filled with user input
  2597. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  2598.     reads from standard input, which may be redirected under DOS 2+
  2599.     if the maximum buffer size (see #01344) is set to 00h, this call returns
  2600.       immediately without reading any input
  2601. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  2602.  
  2603. Format of DOS input buffer:
  2604. Offset    Size    Description    (Table 01344)
  2605.  00h    BYTE    maximum characters buffer can hold
  2606.  01h    BYTE    (call) number of chars from last input which may be recalled
  2607.         (ret) number of characters actually read, excluding CR
  2608.  02h  N BYTEs    actual characters read, including the final carriage return
  2609. --------K-210A00-----------------------------
  2610. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  2611.     AX = 0A00h
  2612.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  2613. Return: buffer offset 02h-05h filled with "Wced" if installed
  2614. Program: WCED is a free command-line editor and history utility by Stuart
  2615.       Russell
  2616. SeeAlso: AH=FFh"CED"
  2617. --------D-210B-------------------------------
  2618. INT 21 - DOS 1+ - GET STDIN STATUS
  2619.     AH = 0Bh
  2620. Return: AL = status
  2621.         00h if no character available
  2622.         FFh if character is available
  2623. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  2624.     standard input is always the keyboard under DOS 1.x, but may be
  2625.       redirected under DOS 2+
  2626.     if the interim console flag is set (see AX=6301h), this function
  2627.       returns AL=FFh if a partially-formed double-byte character is
  2628.       available
  2629. SeeAlso: AH=06h"INPUT",AX=4406h
  2630. --------v-210B56-----------------------------
  2631. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  2632.     AX = 0B56h
  2633. Return: AX = 4952h if resident
  2634. SeeAlso: AX=0D20h,INT 12/AX=4350h/BX=4920h,INT 13/AH=F2h,INT 21/AX=010Fh
  2635. --------D-210C-------------------------------
  2636. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  2637.     AH = 0Ch
  2638.     AL = STDIN input function to execute after flushing buffer
  2639.     other registers as appropriate for the input function
  2640. Return: as appropriate for the specified input function
  2641. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  2642.       no input is attempted
  2643. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  2644. --------D-210D-------------------------------
  2645. INT 21 - DOS 1+ - DISK RESET
  2646.     AH = 0Dh
  2647. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  2648. Notes:    This function writes all modified disk buffers to disk, but does not
  2649.       update the directory information (that is only done when files are
  2650.       closed or a SYNC call is issued)
  2651. SeeAlso: AX=5D01h,AX=710Dh,INT 13/AH=00h,INT 2F/AX=1120h
  2652. --------v-210D20-----------------------------
  2653. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  2654.     AX = 0D20h
  2655. Return: AX = 1971h if resident
  2656. SeeAlso: AX=0B56h,AX=1812h,AX=2C2Ch,AX=710Dh,AH=30h/DX=ABCDh
  2657. --------D-210E-------------------------------
  2658. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  2659.     AH = 0Eh
  2660.     DL = new default drive (00h = A:, 01h = B:, etc)
  2661. Return: AL = number of potentially valid drive letters
  2662. Notes:    under Novell NetWare, the return value is always 32, the number of
  2663.       drives that NetWare supports
  2664.     under DOS 3.0+, the return value is the greatest of 5, the value of
  2665.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  2666.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  2667.       may be accessed as either A: or B:
  2668.     otherwise, the return value is the highest drive actually present
  2669.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  2670.       and 3+ a maximum of 26 drives
  2671.     under Novell DOS 7, this function returns the correct LASTDRIVE value
  2672.       even when the undocumented LASTDRIVE=27..32 directive was used in
  2673.       CONFIG.SYS
  2674.     "parse FCB" (see AH=29h) can be used to determine whether a drive
  2675.       letter is valid
  2676. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  2677. --------v-210E--DLAD-------------------------
  2678. INT 21 U - Novell DOS 7 - SDRes v27.03 - INSTALLATION CHECK
  2679.     AH = 0Eh
  2680.     DL = ADh
  2681. Return: AL = BAh if installed
  2682. Program: SDRes is the resident portion of the Search&Destroy antiviral by
  2683.       Fifth Generation Systems, as bundled with Novell DOS 7
  2684. Note:    SDRes will terminate programs which test for the presence of viruses
  2685.       using interrupt-based installation calls, saying that the program
  2686.       may be infected
  2687. SeeAlso: AH=0Eh/DL=AEh,AH=0Eh/DL=AFh,AH=4Ah/BX=00B6h,INT 13/AX=A759h
  2688. --------v-210E--DLAE-------------------------
  2689. INT 21 U - Novell DOS 7 - SDRes v27.03 - CLEAR ??? FLAG
  2690.     AH = 0Eh
  2691.     DL = AEh
  2692. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AFh,INT 13/AX=A759h
  2693. --------v-210E--DLAF-------------------------
  2694. INT 21 U - Novell DOS 7 - SDRes v27.03 - SET ??? FLAG
  2695.     AH = 0Eh
  2696.     DL = AFh
  2697. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AEh,INT 13/AX=A759h
  2698. --------D-210F-------------------------------
  2699. INT 21 - DOS 1+ - OPEN FILE USING FCB
  2700.     AH = 0Fh
  2701.     DS:DX -> unopened File Control Block (see #01345,#01346)
  2702. Return: AL = status
  2703.         00h successful
  2704.         FFh file not found or access denied
  2705. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  2706.     an unopened FCB has the drive, filename, and extension fields filled
  2707.       in and all other bytes cleared
  2708.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2709.     DR DOS checks password attached with AX=4303h
  2710.     (FAT32 drive) this function will only succeed for creating a volume
  2711.       label; FAT32 does not support FCBs for file I/O
  2712. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  2713. SeeAlso: AH=10h,AH=16h,AH=3Dh,AX=4303h
  2714.  
  2715. Format of File Control Block:
  2716. Offset    Size    Description    (Table 01345)
  2717.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  2718.         FFh is not allowed (signals extended FCB, see #01346)
  2719.  01h  8 BYTEs    blank-padded file name
  2720.  09h  3 BYTEs    blank-padded file extension
  2721.  0Ch    WORD    current block number
  2722.  0Eh    WORD    logical record size
  2723.  10h    DWORD    file size
  2724.  14h    WORD    date of last write (see #01666 at AX=5700h)
  2725.  16h    WORD    time of last write (see #01665 at AX=5700h) (DOS 1.1+)
  2726.  18h  8 BYTEs    reserved (see #01347,#01348,#01349,#01350,#01351)
  2727.  20h    BYTE    record within current block
  2728.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  2729.           byte is omitted)
  2730. SeeAlso: #01346
  2731.  
  2732. Format of Extended File Control Block (XFCB):
  2733. Offset    Size    Description    (Table 01346)
  2734.  00h    BYTE    FFh signature for extended FCB
  2735.  01h  5 BYTEs    reserved
  2736.  06h    BYTE    file attribute if extended FCB
  2737.  07h 36 BYTEs    standard FCB (all offsets are shifted by seven bytes)
  2738. SeeAlso: #01246
  2739.  
  2740. Format of FCB reserved field for DOS 1.0:
  2741. Offset    Size    Description    (Table 01347)
  2742.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  2743.           ID)
  2744.  18h    WORD    number of first cluster in file
  2745.  1Ah    WORD    current absolute cluster number on disk
  2746.  1Ch    WORD    current relative cluster number within file
  2747.         (0 = first cluster of file, 1 = second cluster, etc.)
  2748.  1Eh    BYTE    dirty flag (00h = not dirty)
  2749.  1Fh    BYTE    unused
  2750.  
  2751. Format of FCB reserved field for DOS 1.10-1.25:
  2752. Offset    Size    Description    (Table 01348)
  2753.  18h    BYTE    bit 7: set if logical device
  2754.         bit 6: not dirty
  2755.         bits 5-0: disk number or logical device ID
  2756.  19h    WORD    starting cluster number on disk
  2757.  1Bh    WORD    current absolute cluster number on disk
  2758.  1Dh    WORD    current relative cluster number within file
  2759.  1Fh    BYTE    unused
  2760.  
  2761. Format of FCB reserved field for DOS 2.x:
  2762. Offset    Size    Description    (Table 01349)
  2763.  18h    BYTE    bit 7: set if logical device
  2764.         bit 6: set if open???
  2765.         bits 5-0: ???
  2766.  19h    WORD    starting cluster number on disk
  2767.  1Bh    WORD    ???
  2768.  1Dh    BYTE    ???
  2769.  1Eh    BYTE    ???
  2770.  1Fh    BYTE    ???
  2771.  
  2772. Format of FCB reserved field for DOS 3.x:
  2773. Offset    Size    Description    (Table 01350)
  2774.  18h    BYTE    number of system file table entry for file
  2775.  19h    BYTE    attributes
  2776.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  2777.               01 = SHARE.EXE not loaded, character device
  2778.               10 = SHARE.EXE loaded, remote file
  2779.               11 = SHARE.EXE loaded, local file or device
  2780.         bits 5-0: low six bits of device attribute word
  2781. ---SHARE.EXE loaded, local file---
  2782.  1Ah    WORD    starting cluster of file on disk
  2783.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record
  2784.           (see #01637 at AH=52h)
  2785.  1Eh    BYTE    file attribute
  2786.  1Fh    BYTE    ???
  2787. ---SHARE.EXE loaded, remote file---
  2788.  1Ah    WORD    number of sector containing directory entry (see #01352)
  2789.  1Ch    WORD    relative cluster within file of last cluster accessed
  2790.  1Eh    BYTE    absolute cluster number of last cluster accessed
  2791.  1Fh    BYTE    ???
  2792. ---SHARE.EXE not loaded---
  2793.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  2794.  1Bh    WORD    starting cluster of file
  2795.  1Dh    WORD    number of sector containing directory entry (see #01352)
  2796.  1Fh    BYTE    number of directory entry within sector
  2797. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  2798.       of the device driver header, then the BYTE at 1Ah is overwritten.
  2799. SeeAlso: #01646
  2800.  
  2801. Format of FCB reserved field for DOS 5.0:
  2802. Offset    Size    Description    (Table 01351)
  2803.  18h    BYTE    number of system file table entry for file
  2804.  19h    BYTE    attributes
  2805.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  2806.               01 = SHARE.EXE not loaded, character device
  2807.               10 = SHARE.EXE loaded, remote file
  2808.               11 = SHARE.EXE loaded, local file or device
  2809.         bits 5-0: low six bits of device attribute word
  2810. ---SHARE.EXE loaded, local file---
  2811.  1Ah    WORD    starting cluster of file on disk
  2812.  1Ch    WORD    unique sequence number of sharing record
  2813.  1Eh    BYTE    file attributes
  2814.  1Fh    BYTE    unused???
  2815. ---SHARE.EXE loaded, remote file---
  2816.  1Ah    WORD    network handle
  2817.  1Ch    DWORD    network ID
  2818. ---SHARE not loaded, local device---
  2819.  1Ah    DWORD    pointer to device driver header (see #01646)
  2820.  1Eh  2 BYTEs    unused???
  2821. ---SHARE not loaded, local file---
  2822.  1Ah    BYTE    extra info
  2823.         bit 7: read-only attribute from SFT
  2824.         bit 6: archive attribute from SFT
  2825.         bits 5-0: high bits of sector number
  2826.  1Bh    WORD    starting cluster of file
  2827.  1Dh    WORD    low word of sector number containing directory entry
  2828.         (see #01352)
  2829.  1Fh    BYTE    number of directory entry within sector
  2830. --------D-2110-------------------------------
  2831. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  2832.     AH = 10h
  2833.     DS:DX -> File Control Block (see #01345)
  2834. Return: AL = status
  2835.         00h successful
  2836.         FFh failed
  2837. Notes:    a successful close forces all disk buffers used by the file to be
  2838.       written and the directory entry to be updated
  2839.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2840. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  2841. --------D-2111-------------------------------
  2842. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  2843.     AH = 11h
  2844.     DS:DX -> unopened FCB (see #01345), may contain '?' wildcards
  2845. Return: AL = status
  2846.         00h successful
  2847.         [DTA] unopened FCB for first matching file
  2848.         FFh no matching filename, or bad FCB
  2849. Notes:    the type of the returned FCB depends on whether the input FCB was a
  2850.       normal or an extended FCB
  2851.     the data returned in the DTA (disk transfer area) is actually the
  2852.       drive number (or extended FCB header and drive number) followed by
  2853.       the file's directory entry (see #01352); this format happens to be
  2854.       compatible with an unopened FCB
  2855.     for extended FCBs with search attribute 08h, the volume label (if any)
  2856.       will be returned even if the current directory is not the root dir.
  2857.     DOS 3.0+ also allows the '*' wildcard
  2858.     the search FCB at DS:DX must not be modified if AH=12h will be used to
  2859.       continue searching; DOS 3.3 has set the following parts of the FCB:
  2860.          0Ch    BYTE    ???
  2861.          0Dh    WORD    directory entry number of matching file
  2862.          0Fh    WORD    cluster number of current directory
  2863.          11h  4 BYTEs    ???
  2864.          15h    BYTE    drive number (1=A:)
  2865.     this function is used by many copy protection schemes to obtain the
  2866.       starting cluster of a file
  2867. BUG:    under Windows95, if a .EXE program ("MZ" header) rather than a true
  2868.       .COM calls this function from a DOS box, the ten bytes of the
  2869.       directory entry from 0Ch to 15h may be filled with zeros rather than
  2870.       the additional file times
  2871. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  2872.  
  2873. Format of DOS directory entry:
  2874. Offset    Size    Description    (Table 01352)
  2875.  00h  8 BYTEs    blank-padded filename
  2876.         first character is set to E5h for deleted files (05h for
  2877.           pending delete files under Novell DOS / OpenDOS)
  2878.  08h  3 BYTEs    blank-padded file extension
  2879.  0Bh    BYTE    attributes
  2880.  0Ch 10 BYTEs    (MS-DOS 1.0-6.22) reserved
  2881.         (DR DOS) used to store file password / owner (see #01354)
  2882.             (see also INT 21/AX=4302h)
  2883.         (Novell DOS 7) DELWATCH data (see #01354)
  2884.         (MS-DOS 7/Windows95) additional file times (see #01353)
  2885.  16h    WORD    time of creation or last update (see #01665 at AX=5700h)
  2886.  18h    WORD    date of creation or last update (see #01666 at AX=5700h)
  2887.  1Ah    WORD    starting cluster number (see also AX=440Dh/CX=0871h)
  2888.         (may not be set in INT 21/AH=11h return data for FAT32 drives)
  2889.  1Ch    DWORD    file size
  2890. SeeAlso: #01355,#02628,#02629
  2891.  
  2892. Format of MS-DOS 7/Windows95 additional file times:
  2893. Offset    Size    Description    (Table 01353)
  2894.  00h    BYTE    reserved
  2895.  01h    BYTE    10-millisecond units past creation time below
  2896.  02h    WORD    file creation time
  2897.  04h    WORD    file creation date
  2898.  06h    WORD    last-access date
  2899.  08h    WORD    (FAT32) high word of starting cluster number
  2900. Note:    this data is stored beginning at offset 0Ch in a standard directory
  2901.       entry
  2902. SeeAlso: #01352
  2903.  
  2904. Format of DR DOS 6/Novell DOS 7 additional file information:
  2905. Offset    Size    Description    (Table 01354)
  2906.  0Ch    BYTE    reserved (00h)
  2907.  0Dh    BYTE    first character of original filename for deleted file
  2908.  0Eh    WORD    encrypted file/directory password
  2909.  10h    WORD    reserved (00h)
  2910.         (Novell DOS 7 DELWATCH) original file time
  2911.             cleared when file is undeleted or purged
  2912.  12h    WORD    (DR DOS 6) file owner ID
  2913.         (Novell DOS 7 DELWATCH) original file date
  2914.             cleared when file is undeleted or purged
  2915.  14h    WORD    single/multiuser file/directory access rights (see AX=4302h)
  2916. ---deleted files---
  2917.  16h    WORD    (Novell DOS 7 DELWATCH) time of deletion
  2918.  18h    WORD    (Novell DOS 7 DELWATCH) date of deletion
  2919. Note:    offsets are within the full directory entry
  2920. SeeAlso: #01352
  2921.  
  2922. Format of MS-DOS 7/Windows95 long-filename directory entry:
  2923. Offset    Size    Description    (Table 01355)
  2924.  00h    BYTE    LFN record sequence and flags
  2925.         bits 5-0: sequence number
  2926.         bit 6: set if last long-filename record for file
  2927.         bit 7: set if file deleted
  2928.  01h 10 BYTEs    long filename, first part
  2929.  0Bh    BYTE    0Fh (otherwise impossible file attribute, used as signature)
  2930.  0Ch    BYTE    reserved??? (00h)
  2931.  0Dh    BYTE    checksum for short filename
  2932.  0Eh 12 BYTEs    long filename, second part
  2933.  1Ah    WORD    first cluster number (always 0000h for LFN records)
  2934.  1Ch  4 BYTEs    long filename, third part
  2935. Notes:    long-filename entries are always stored in the directory just prior
  2936.       to the short-name entry for a file
  2937.     multiple LFN records are used if the long filename does not fit into
  2938.       a single record
  2939.     the short-filename checksum byte is computed by adding up the
  2940.       eleven bytes of the short filename, rotating the intermediate
  2941.       sum right one bit before adding the next character
  2942.     the long filename is encoded as 16-bit Unicode characters; for most
  2943.       filenames, this appears in the directory as the ASCII character
  2944.       followed by 00h
  2945. SeeAlso: #01352,INT 21/AX=5704h,INT 21/AH=71h
  2946. --------D-2112-------------------------------
  2947. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  2948.     AH = 12h
  2949.     DS:DX -> unopened FCB (see #01345)
  2950. Return: AL = status
  2951.         00h successful
  2952.         Disk Transfer Area filled with unopened FCB
  2953.         FFh no more matching filenames
  2954. Note:    (see AH=11h)
  2955.     assumes that successful FindFirst executed on search FCB before call
  2956. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  2957. --------D-2113-------------------------------
  2958. INT 21 - DOS 1+ - DELETE FILE USING FCB
  2959.     AH = 13h
  2960.     DS:DX -> unopened FCB (see #01345), filename filled with template for
  2961.         deletion ('?' wildcards allowed)
  2962. Return: AL = status
  2963.         00h one or more files successfully deleted
  2964.         FFh no matching files or all were read-only or locked
  2965. Notes:    DOS 1.25+ deletes everything in the current directory (including
  2966.       subdirectories) and sets the first byte of the name to 00h (entry
  2967.       never used) instead of E5h if called on an extended FCB with
  2968.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  2969.       2 for DOS 1.x).  This may have originally been an optimization to
  2970.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  2971.       the directory search upon encountering a never-used entry), but can
  2972.       corrupt the filesystem under DOS 2+ because subdirectories are
  2973.       removed without deleting the files they contain.
  2974.     currently-open files should not be deleted
  2975.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  2976.       Novell NetWare, DR DOS 6, and Novell DOS 7/OpenDOS 7.01 do not
  2977.     this function generates a trap "D" under OS/2 v4.x (Warp4) when called
  2978.       on an HPFS partition with a wildcard in the filename; it operates
  2979.       correctly on FAT partitions and when called without wildcards
  2980. SeeAlso: AH=41h,INT 2F/AX=1113h
  2981. --------D-2114-------------------------------
  2982. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  2983.     AH = 14h
  2984.     DS:DX -> opened FCB (see #01345)
  2985. Return: AL = status
  2986.         00h successful
  2987.         01h end of file (no data)
  2988.         02h segment wrap in DTA
  2989.         03h end of file, partial record read
  2990.     Disk Tranfer Area filled with record read from file
  2991. Notes:    reads a record of the size specified in the FCB beginning at the
  2992.       current file position, then updates the current block and current
  2993.       record fields in the FCB
  2994.     if a partial record was read, it is zero-padded to the full size
  2995.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2996. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh"DOS",INT 2F/AX=1108h
  2997. --------D-2115-------------------------------
  2998. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  2999.     AH = 15h
  3000.     DS:DX -> opened FCB (see #01345)
  3001.     Disk Tranfer Area contains record to be written
  3002. Return: AL = status
  3003.         00h successful
  3004.         01h disk full
  3005.         02h segment wrap in DTA
  3006. Notes:    writes a record of the size specified in the FCB beginning at the
  3007.       current file position, then updates the current block and current
  3008.       record fields in the FCB
  3009.     if less than a full sector is written, the data is placed in a DOS
  3010.       buffer to be written out at a later time
  3011.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3012. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  3013. --------D-2116-------------------------------
  3014. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  3015.     AH = 16h
  3016.     DS:DX -> unopened FCB (see #01345), wildcards not allowed
  3017. Return: AL = status
  3018.         00h successful
  3019.         FFh directory full or file exists and is read-only or locked
  3020. Notes:    if file already exists, it is truncated to zero length
  3021.     if an extended FCB is used, the file is given the attribute in the
  3022.       FCB; this is how to create a volume label in the disk's root dir
  3023.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3024.     (FAT32 drive) this function will only succeed for creating a volume
  3025.       label; FAT32 does not support FCBs for file I/O
  3026. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  3027. --------D-2117-------------------------------
  3028. INT 21 - DOS 1+ - RENAME FILE USING FCB
  3029.     AH = 17h
  3030.     DS:DX -> modified FCB (see also #01345)
  3031.         the old filename ('?' wildcards OK) is in the standard location
  3032.         while the new filename ('?' wildcards OK, no drive) is stored
  3033.         in the 11 bytes beginning at offset 11h
  3034. Return: AL = status
  3035.         00h successfully renamed
  3036.         FFh no matching files,file is read-only, or new name already exists
  3037. Notes:    subdirectories may be renamed using an extended FCB with the
  3038.       appropriate attribute, as may volume labels
  3039.     DR DOS checks password attached with AX=4303h before permitting rename
  3040. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  3041. --------D-2118-------------------------------
  3042. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3043.     AH = 18h
  3044. Return: AL = 00h
  3045. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  3046.       which is meaningless under MS-DOS
  3047. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h,INT 60/DI=0513h
  3048. --------v-211812------------------------
  3049. INT 21 - VIRUS - "Tasha Yar" - INSTALLATION CHECK
  3050.     AX = 1812h
  3051. Return: AL = 00h if resident
  3052.     DX = 4310h if resident
  3053. SeeAlso: INT 21/AX=0B56h"VIRUS",INT 21/AX=187Fh,INT 21/AX=2C2Ch"VIRUS"
  3054. --------v-21187FBX4453-----------------------
  3055. INT 21 - VIRUS - "DS-3783" -INSTALLATION CHECK
  3056.     AX = 187Fh
  3057.     BX = 4453h
  3058. Return: BX = 87A1h if resident
  3059. SeeAlso: AX=1812h"VIRUS",AX=18FFh"VIRUS"
  3060. --------v-2118FF-----------------------------
  3061. INT 21 - VIRUS - "Pathogen:SMEG" - INSTALLATION CHECK
  3062.     AX = 18FFh
  3063. Return: AX = E701h if resident
  3064. SeeAlso: INT 21/AX=1812h"VIRUS",INT 21/AX=2080h"VIRUS"
  3065. --------D-2119-------------------------------
  3066. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  3067.     AH = 19h
  3068. Return: AL = drive (00h = A:, 01h = B:, etc)
  3069. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  3070.       from a particular location every time it starts a command to
  3071.       determine when to issue an automatic EOJ
  3072. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  3073. --------D-211A-------------------------------
  3074. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  3075.     AH = 1Ah
  3076.     DS:DX -> Disk Transfer Area (DTA)
  3077. Notes:    the DTA is set to PSP:0080h when a program is started
  3078.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  3079. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  3080. --------D-211B-------------------------------
  3081. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  3082.     AH = 1Bh
  3083. Return: AL = sectors per cluster (allocation unit)
  3084.     CX = bytes per sector
  3085.     DX = total number of clusters
  3086.     DS:BX -> media ID byte (see #01356)
  3087. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  3088.       versions return a pointer to a copy of the FAT's ID byte
  3089.     this function may not be properly supported on CD-ROMs and other
  3090.       installable file systems (use AX=4402h"CD-ROM" for CD-ROMs
  3091.       instead)
  3092. BUG:    DOS 7.10 (Win95B/Win98) reportedly returns incorrect values in AL and
  3093.       DX for FAT12/FAT16 drives, even though it manages correct results
  3094.       for FAT32 drives (DOS windows are not affected, only real-mode
  3095.       DOS)
  3096. SeeAlso: AH=1Ch,AH=36h
  3097.  
  3098. (Table 01356)
  3099. Values for media ID byte:
  3100.  FFh    floppy, double-sided, 8 sectors per track (320K)
  3101.  FEh    floppy, single-sided, 8 sectors per track (160K)
  3102.  FDh    floppy, double-sided, 9 sectors per track (360K)
  3103.  FCh    floppy, single-sided, 9 sectors per track (180K)
  3104.  FAh    HP 200LX D: ROM disk, 16 sectors per track (995K)
  3105.     HP 200LX E: (Stacker host drive ???)
  3106.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  3107.     floppy, double-sided, 9 sectors per track (720K,3.5")
  3108.  F8h    hard disk
  3109.  F0h    other media
  3110.     (e.g. floppy, double-sized, 18 sectors per track -- 1.44M,3.5")
  3111. --------D-211C-------------------------------
  3112. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  3113.     AH = 1Ch
  3114.     DL = drive (00h = default, 01h = A:, etc)
  3115. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  3116.     CX = bytes per sector
  3117.     DX = total number of clusters
  3118.     DS:BX -> media ID byte (see #01356)
  3119. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  3120.       versions return a pointer to a copy of the FAT's ID byte
  3121.     on a DBLSPACE drive, the total number of clusters is based on the
  3122.       estimated compression ratio
  3123.     this function may not be properly supported on CD-ROMs and other
  3124.       installable file systems (use AX=4402h"CD-ROM" for CD-ROMs
  3125.       instead)
  3126. BUG:    DOS 7.10 (Win95B/Win98) reportedly returns incorrect values in AL and
  3127.       DX for FAT12/FAT16 drives, even though it manages correct results
  3128.       for FAT32 drives (DOS windows are not affected, only real-mode
  3129.       DOS)
  3130. SeeAlso: AH=1Bh,AH=36h
  3131. --------D-211D-------------------------------
  3132. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3133.     AH = 1Dh
  3134. Return: AL = 00h
  3135. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  3136.       drives", which is meaningless under MS-DOS
  3137. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  3138. --------D-211E-------------------------------
  3139. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3140.     AH = 1Eh
  3141. Return: AL = 00h
  3142. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  3143.      meaningless under MS-DOS 1.x
  3144. SeeAlso: AH=18h,AH=1Dh,AH=20h
  3145. --------D-211F-------------------------------
  3146. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  3147.     AH = 1Fh
  3148. Return: AL = status
  3149.         00h successful
  3150.         DS:BX -> Drive Parameter Block (DPB) (see #01357 for DOS 1.x,
  3151.             AH=32h for DOS 2+)
  3152.         FFh invalid drive
  3153. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  3154.       only the DOS 4.0+ version of the DPB has been documented
  3155. SeeAlso: AH=32h,AX=7302h
  3156.  
  3157. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  3158. Offset    Size    Description    (Table 01357)
  3159.  00h    BYTE    sequential device ID
  3160.  01h    BYTE    logical drive number (0=A:)
  3161.  02h    WORD    bytes per sector
  3162.  04h    BYTE    highest sector number within a cluster
  3163.  05h    BYTE    shift count to convert clusters into sectors
  3164.  06h    WORD    starting sector number of first FAT
  3165.  08h    BYTE    number of copies of FAT
  3166.  09h    WORD    number of directory entries
  3167.  0Bh    WORD    number of first data sector
  3168.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  3169.  0Fh    BYTE    sectors per FAT
  3170.  10h    WORD    starting sector of directory
  3171.  12h    WORD    address of allocation table
  3172. Note:    the DOS 1.0 table is the same except that the first and last fields
  3173.       are missing; see INT 21/AH=32h for the DOS 2+ version
  3174. SeeAlso: #01395,#04039
  3175. --------D-2120-------------------------------
  3176. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3177.     AH = 20h
  3178. Return: AL = 00h
  3179. Note:    corresponds to the CP/M BDOS function "get/set default user
  3180.       (sublibrary) number", which is meaningless under MS-DOS
  3181. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  3182. --------v-212080-----------------------------
  3183. INT 21 - VIRUS - "New-Year" - INSTALLATION CHECK
  3184.     AX = 2080h
  3185. Return: AH = 00h if resident (normal DOS return would be AX = 2000h)
  3186. SeeAlso: INT 21/AX=18FFh"VIRUS",INT 21/AX=2C2Ch"VIRUS"
  3187. --------D-2121-------------------------------
  3188. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  3189.     AH = 21h
  3190.     DS:DX -> opened FCB (see #01345)
  3191. Return: AL = status
  3192.         00h successful
  3193.         01h end of file, no data read
  3194.         02h segment wrap in DTA, no data read
  3195.         03h end of file, partial record read
  3196.     Disk Tranfer Area filled with record read from file
  3197. Notes:    the record is read from the current file position as specified by the
  3198.       random record and record size fields of the FCB
  3199.     the file position is not updated after reading the record
  3200.     if a partial record is read, it is zero-padded to the full size
  3201.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3202. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh"DOS"
  3203. --------D-2122-------------------------------
  3204. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  3205.     AH = 22h
  3206.     DS:DX -> opened FCB (see #01345)
  3207.     Disk Transfer Area contains record to be written
  3208. Return: AL = status
  3209.         00h successful
  3210.         01h disk full
  3211.         02h segment wrap in DTA
  3212. Notes:    the record is written to the current file position as specified by the
  3213.       random record and record size fields of the FCB
  3214.     the file position is not updated after writing the record
  3215.     if the record is located beyond the end of the file, the file is
  3216.       extended but the intervening data remains uninitialized
  3217.     if the record only partially fills a disk sector, it is copied to a
  3218.       DOS disk buffer to be written out to disk at a later time
  3219.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3220. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  3221. --------D-2123-------------------------------
  3222. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  3223.     AH = 23h
  3224.     DS:DX -> unopened FCB (see #01345), wildcards not allowed
  3225. Return: AL = status
  3226.         00h successful (matching file found)
  3227.         FCB random record field filled with size in records, rounded up
  3228.         to next full record
  3229.         FFh failed (no matching file found)
  3230. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3231.     MS-DOS returns nonsense if the FCB record number field is set to a very
  3232.       large positive number, and status FFh if negative; DR DOS returns the
  3233.       correct file size in both cases
  3234. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  3235. SeeAlso: AH=42h
  3236. --------D-2124-------------------------------
  3237. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  3238.     AH = 24h
  3239.     DS:DX -> opened FCB (see #01345)
  3240. Notes:    computes the random record number corresponding to the current record
  3241.       number and record size, then stores the result in the FCB
  3242.     normally used when switching from sequential to random access
  3243.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3244. SeeAlso: AH=21h,AH=27h,AH=42h
  3245. --------D-2125-------------------------------
  3246. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  3247.     AH = 25h
  3248.     AL = interrupt number
  3249.     DS:DX -> new interrupt handler
  3250. Notes:    this function is preferred over direct modification of the interrupt
  3251.       vector table
  3252.     some DOS extenders place an API on this function, as it is not
  3253.       directly meaningful in protected mode
  3254.     under DR DOS 5.0+, this function does not use any of the DOS-internal
  3255.       stacks and may thus be called at any time
  3256.     Novell NetWare (except the new DOS Requester) monitors the offset of
  3257.       any INT 24 set, and if equal to the value at startup, substitutes
  3258.       its own handler to allow handling of network errors; this introduces
  3259.       the potential bug that any program whose INT 24 handler offset
  3260.       happens to be the same as COMMAND.COM's will not have its INT 24
  3261.       handler installed
  3262. SeeAlso: AX=2501h,AH=35h
  3263. --------E-212501-----------------------------
  3264. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  3265.     AX = 2501h
  3266.     SS = application's original SS or DS (FlashTek X-32VM)
  3267. Return: CF clear if successful
  3268.     CF set on error
  3269.         caller is operating on X-32 stack (FlashTek X-32VM)
  3270. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  3271.       system calls.     Only available when directly using 386/DOS-Extender or
  3272.       a compatible DOS extender, or when using a product that was created
  3273.       using 386-DOS/Extender or a compatible
  3274.     this function is also supported by FlashTek X-32VM
  3275. SeeAlso: AH=30h"Phar Lap"
  3276. --------E-212502-----------------------------
  3277. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  3278.     AX = 2502h
  3279.     CL = interrupt number
  3280. Return: CF clear
  3281.     ES:EBX = CS:EIP of protected-mode interrupt handler
  3282. Note:    this function is also supported by FlashTek X-32VM
  3283. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  3284. --------E-212503-----------------------------
  3285. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  3286.     AX = 2503h
  3287.     CL = interrupt number
  3288. Return: CF clear
  3289.     EBX = CS:IP of real-mode interrupt handler
  3290. Note:    this function is also supported by FlashTek X-32VM
  3291. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  3292. --------E-212504-----------------------------
  3293. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  3294.     AX = 2504h
  3295.     CL = interrupt number
  3296.     DS:EDX = CS:EIP of protected-mode interrupt handler
  3297. Return: CF clear
  3298. Note:    this function is also supported by FlashTek X-32VM
  3299. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  3300. --------E-212505-----------------------------
  3301. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  3302.     AX = 2505h
  3303.     CL = interrupt number
  3304.     EBX = CS:IP of real-mode interrupt handler
  3305. Return: CF clear
  3306. Note:    this function is also supported by FlashTek X-32VM
  3307. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  3308. --------E-212506-----------------------------
  3309. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  3310.     AX = 2506h
  3311.     CL = interrupt number
  3312.     DS:EDX = CS:EIP of protected-mode interrupt handler
  3313. Return: CF clear
  3314. Notes:    this function modifies both the real-mode low-memory interrupt
  3315.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  3316.     interrupts occurring in real mode are resignaled in protected mode
  3317.     this function is also supported by FlashTek X-32VM
  3318. --------E-212507-----------------------------
  3319. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  3320.     AX = 2507h
  3321.     CL = interrupt number
  3322.     DS:EDX = CS:EIP of protected-mode interrupt handler
  3323.     EBX = CS:IP of real-mode interrupt handler
  3324. Return: CF clear
  3325. Notes:    interrupts are disabled until both vectors have been modified
  3326.     this function is also supported by FlashTek X-32VM
  3327. SeeAlso: AX=2504h,AX=2505h
  3328. --------E-212508-----------------------------
  3329. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  3330.     AX = 2508h
  3331.     BX = segment selector
  3332. Return: CF clear if successful
  3333.         ECX = linear base address of segment
  3334.     CF set if invalid segment selector
  3335. Note:    this function is also supported by FlashTek X-32VM
  3336. SeeAlso: AX=2509h
  3337. --------E-212509-----------------------------
  3338. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  3339.     AX = 2509h
  3340.     EBX = linear address to convert
  3341. Return: CF clear if successful
  3342.         ECX = physical address (carry flag clear)
  3343.     CF set if linear address not mapped in page tables
  3344. SeeAlso: AX=2508h
  3345. --------E-212509-----------------------------
  3346. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  3347.     AX = 2509h
  3348. Return: CF clear
  3349.     EAX high word = default DS
  3350.     AX = alias for 16-bit data segment
  3351.     BX = real mode code segment
  3352.     EDX high word = selector covering full 4GB address space
  3353.     DX = default SS
  3354.     ESI high word = PSP selector
  3355.     SI = environment selector
  3356. --------E-21250A-----------------------------
  3357. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  3358.     AX = 250Ah
  3359.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  3360.          to modify
  3361.     EBX = physical base address of memory to map (multiple of 4K)
  3362.     ECX = number of physical 4K pages to map
  3363. Return: CF clear if successful
  3364.         EAX = 32-bit offset in segment of mapped memory
  3365.     CF set on error
  3366.         EAX = error code
  3367.         08h insufficient memory to create page tables
  3368.         09h invalid segment selector
  3369. SeeAlso: INT 31/AX=0800h
  3370. --------E-21250C-----------------------------
  3371. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  3372.     AX = 250Ch
  3373. Return: CF clear
  3374.     AL = base interrupt vector for IRQ0-IRQ7
  3375.     AH = base interrupt vector for IRQ8-IRQ15
  3376.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  3377. Note:    this function is also supported by FlashTek X-32VM
  3378. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  3379. --------E-21250D-----------------------------
  3380. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  3381.     AX = 250Dh
  3382. Return: CF clear
  3383.     EAX = CS:IP of real-mode callback procedure (see #01358) that will
  3384.           call through from real mode to a protected-mode routine
  3385.     EBX = 32-bit real-mode address of intermode call data buffer
  3386.     ECX = size in bytes of intermode call data buffer
  3387.     ES:EDX = protected-mode address of intermode call data buffer
  3388. Notes:    this function is also supported by FlashTek X-32VM
  3389.     X-32VM guarantees the intermode buffer to be at least 4 KB
  3390. SeeAlso: AX=250Eh
  3391.  
  3392. (Table 01358)
  3393. Call Phar Lap real-mode callback with:
  3394.     STACK:    DWORD    offset to protected-mode code
  3395.         WORD    placeholder for protected-mode CS
  3396.         DWORD    pointer to selector structure (see #01359)
  3397.             or 0000h:0000h for defaults
  3398.         var    parameters for protected-mode procedure
  3399. Return: via FAR return
  3400.  
  3401. Format of Phar Lap selector structure:
  3402. Offset    Size    Description    (Table 01359)
  3403.  00h    WORD    protected-mode GS selector
  3404.  02h    WORD    protected-mode FS selector
  3405.  04h    WORD    protected-mode ES selector
  3406.  06h    WORD    protected-mode DS selector
  3407. --------E-21250E-----------------------------
  3408. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  3409.     AX = 250Eh
  3410.     EBX = CS:IP of real-mode procedure to call
  3411.     ECX = number of two-byte words to copy from protected-mode stack
  3412.           to real-mode stack
  3413. Return: CF clear if successful
  3414.         all segment registers unchanged
  3415.         all general registers contain values set by real-mode procedure
  3416.         all other flags set as they were left by real-mode procedure
  3417.         stack unchanged
  3418.     CF set on error
  3419.         EAX = error code
  3420.         01h not enough real-mode stack space
  3421. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  3422.       call will fail if ECX > 0000003Fh
  3423. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  3424. --------E-21250F-----------------------------
  3425. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  3426.     AX = 250Fh
  3427.     ES:EBX = 48-bit protected-mode address to convert
  3428.     ECX = 00000000h or length of data in bytes
  3429. Return: CF clear if successful (address < 1MB and contiguous)
  3430.         ECX = 32-bit real-mode MS-DOS address
  3431.     CF set on error (address >= 1MB or not contiguous)
  3432.         ECX = linear address
  3433. Note:    this function is also supported by FlashTek X-32VM
  3434. SeeAlso: AX=2510h
  3435. --------E-212510-----------------------------
  3436. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  3437.     AX = 2510h
  3438.     EBX = CS:IP of real-mode procedure to call
  3439.     ECX = number of two-byte words to copy to protected-mode stack to
  3440.           real-mode stack
  3441.     DS:EDX -> pointer to parameter block (see #01360)
  3442. Return: CF clear if successful
  3443.         all segment registers unchanged,
  3444.         EDX unchanged
  3445.         all other general registers contain values set by real-mode proc
  3446.         all other flags are set as they were left by real-mode procedure
  3447.         real-mode register values are returned in the parameter block
  3448.     CF set on error
  3449.         EAX = error code
  3450.         01h not enough real-mode stack space
  3451. Note:    unlike most of the preceding 25xxh functions, this one is not
  3452.       supported by FlashTek X-32VM
  3453. SeeAlso: AX=250Eh,AX=250Fh
  3454.  
  3455. Format of Phar Lap real-mode call parameter block:
  3456. Offset    Size    Description    (Table 01360)
  3457.  00h    WORD    real-mode DS value
  3458.  02h    WORD    real-mode ES value
  3459.  04h    WORD    real-mode FS value
  3460.  06h    WORD    real-mode GS value
  3461.  08h    DWORD    real-mode EAX value
  3462.  0Ch    DWORD    real-mode EBX value
  3463.  10h    DWORD    real-mode ECX value
  3464.  14h    DWORD    real-mode EDX value
  3465. --------E-212511-----------------------------
  3466. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  3467.     AX = 2511h
  3468.     DS:EDX -> parameter block (see #01361)
  3469. Return: all segment registers unchanged
  3470.     EDX unchanged
  3471.     all other registers contain values set by the real-mode int handler
  3472.     the flags are set as they were left by the real-mode interrupt handler
  3473.     real-mode register values are returned in the parameter block
  3474. Note:    this function is also supported by FlashTek X-32VM
  3475. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  3476.  
  3477. Format of Phar Lap real-mode interrupt parameter block:
  3478. Offset    Size    Description    (Table 01361)
  3479.  00h    WORD    interrupt number
  3480.  02h    WORD    real-mode DS value
  3481.  04h    WORD    real-mode ES value
  3482.  06h    WORD    real-mode FS value
  3483.  08h    WORD    real-mode GS value
  3484.  0Ah    DWORD    real-mode EAX value
  3485.  0Eh    DWORD    real-mode EDX value
  3486. Note: all other real-mode values set from protected-mode registers
  3487. --------E-212512-----------------------------
  3488. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  3489.     AX = 2512h
  3490.     DS:EDX -> pointer to ASCIZ program name
  3491.     ES:EBX -> pointer to parameter block (see #01363)
  3492.     ECX = size in bytes of LDT buffer
  3493. Return: CF clear if successful
  3494.         EAX = number of segment descriptors in LDT
  3495.     CF set on error
  3496.         EAX = error code (see #01362)
  3497. SeeAlso: AX=2517h
  3498.  
  3499. (Table 01362)
  3500. Values for Phar Lap error code:
  3501.  02h    file not found or path invalid
  3502.  05h    access denied
  3503.  08h    insufficient memory
  3504.  0Ah    environment invalid
  3505.  0Bh    invalid file format
  3506.  80h    LDT too small
  3507.  
  3508. Format of Phar Lap program load parameter block:
  3509. Offset    Size    Description    (Table 01363)
  3510. Input:
  3511.  00h    DWORD    32-bit offset of environment string
  3512.  04h    WORD    segment of environment string
  3513.  06h    DWORD    32-bit offset of command-tail string
  3514.  0Ah    WORD    segment of command-tail string
  3515.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  3516.  10h    WORD    segment of LDT buffer
  3517. Output:
  3518.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  3519.  14h    WORD    real/protected mode flag
  3520.         0000h  real mode
  3521.         0001h  protected mode
  3522.  16h    DWORD    initial EIP value
  3523.  1Ah    WORD    initial CS value
  3524.  1Ch    DWORD    initial ESP value
  3525.  20h    WORD    initial SS value
  3526.  22h    WORD    initial DS value
  3527.  24h    WORD    initial ES value
  3528.  26h    WORD    initial FS value
  3529.  28h    WORD    initial GS value
  3530. --------E-212513-----------------------------
  3531. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  3532.     AX = 2513h
  3533.     BX = segment selector of descriptor in GDT or LDT
  3534.     CL = access-rights byte for alias descriptor
  3535.     CH = use-type bit (USE16 or USE32) for alias descriptor
  3536. Return: CF clear if successful
  3537.         AX = segment selector for created alias
  3538.     CF set on error
  3539.         EAX = error code
  3540.         08h insufficient memory (can't grow LDT)
  3541.         09h invalid segment selector in BX
  3542. --------E-212514-----------------------------
  3543. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  3544.     AX = 2514h
  3545.     BX = segment selector of descriptor in GDT or LDT
  3546.     CL = new access-rights byte
  3547.     CH = new use-type bit (USE16 or USE32)
  3548. Return: CF clear if successful
  3549.     CF set on error
  3550.         EAX = error code
  3551.         09h invalid selector in BX
  3552. SeeAlso: AX=2515h,INT 31/AX=0009h
  3553. --------E-212515-----------------------------
  3554. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  3555.     AX = 2515h
  3556.     BX = segment selector of descriptor in GDT or LDT
  3557. Return: CF clear if successful
  3558.         CL = access-rights byte for segment
  3559.         CH = use-type bit (USE16 or USE32)
  3560.     ECX<16-31> destroyed
  3561.     CF set on error
  3562.         EAX = error code
  3563.         09h invalid segment selector in BX
  3564. SeeAlso: AX=2514h
  3565. --------E-212516-----------------------------
  3566. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  3567.     AX = 2516h
  3568. Return: CF clear
  3569. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  3570. --------E-212517-----------------------------
  3571. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  3572.     AX = 2517h
  3573. Return: CF clear
  3574.     ES:EBX -> data buffer (protected mode address)
  3575.     ECX -> data buffer (real mode address)
  3576.     EDX = size of data buffer in bytes
  3577. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  3578. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  3579. --------E-212518-----------------------------
  3580. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  3581.     AX = 2518h
  3582.     ES:EBX -> function to call when a segment is moved
  3583. Return: CF clear
  3584.     ES:EBX -> previous handler
  3585. --------E-212519-----------------------------
  3586. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  3587.     AX = 2519h
  3588. Return: CF clear
  3589.     EAX = error code
  3590.         0000h  no error
  3591.         0001h  out of physical memory
  3592.         0002h  out of swap space (unable to grow swap file)
  3593.         0003h  out of LDT entries and unable to grow LDT
  3594.         0004h  unable to change extended memory allocation mark
  3595.         FFFFFFFFh    paging disabled
  3596. Note:    VMM is the Virtual Memory Manager option
  3597. --------E-21251A-----------------------------
  3598. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  3599.     AX = 251Ah
  3600.     EDX = number of 4k pages to lock
  3601.     if BL = 00h
  3602.         ECX = linear address of first page to lock
  3603.     if BL = 01h
  3604.         ES:ECX -> pointer to first page to lock
  3605. Return: CF clear if successful
  3606.     CF set on error
  3607.         EAX = error code
  3608.         08h insufficient memory
  3609.         09h invalid address range
  3610. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  3611. --------E-21251B-----------------------------
  3612. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  3613.     AX = 251Bh
  3614.     EDX = number of pages to unlock
  3615.     if BL = 00h
  3616.         ECX = linear address of first page to unlock
  3617.     if BL = 01h
  3618.         ES:ECX -> pointer to first page to unlock
  3619. Return: CF clear if successful
  3620.     CF set on error
  3621.         EAX = error code
  3622.         09h invalid address range
  3623. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  3624. --------E-21251C-----------------------------
  3625. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  3626.     AX = 251Ch
  3627.     BH = preservation flag (00h preserve contents, 01h discard contents)
  3628.     EDX = number of pages to free
  3629.     BL = address type
  3630.         00h linear address
  3631.         ECX = linear address of first page to be freed
  3632.         01h pointer
  3633.         ES:ECX -> first page to be freed
  3634. Return: CF clear if successful
  3635.     CF set on error
  3636.         EAX = error code
  3637.         08h memory error, swap space full, no VMM or DPMI
  3638.         09h invalid address
  3639. --------E-21251D-----------------------------
  3640. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  3641.     AX = 251Dh
  3642.     BL = address type
  3643.         00h linear address
  3644.         ECX = linear address of page table entry to read
  3645.         01h pointer
  3646.         ES:ECX -> page table entry to read
  3647. Return: CF clear if successful
  3648.         EAX = contents of page table entry
  3649.     CF set on error
  3650.         EAX = error code
  3651.         09h invalid address or NOPAGE option set
  3652.         78h invalid under DPMI
  3653. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  3654. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  3655. --------E-21251E-----------------------------
  3656. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  3657.     AX = 251Eh
  3658.     BL = address type
  3659.         00h linear address
  3660.         ECX = linear address of page table entry to read
  3661.         01h pointer
  3662.         ES:ECX -> page table entry to read
  3663.     EDX = new value for page table entry
  3664. Return: CF clear if successful
  3665.     CF set on error
  3666.         EAX = error code
  3667.         09h invalid address or NOPAGE option set
  3668.         82h not compatible with DPMI
  3669. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  3670. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  3671. --------E-21251F-----------------------------
  3672. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  3673.     AX = 251Fh
  3674.     BL = address type
  3675.         00h linear address
  3676.         ECX = linear address of first page table entry
  3677.         EDX = linear address of second page table entry
  3678.         01h pointer
  3679.         ES:ECX -> first page table entry
  3680.         ES:EDX -> second page table entry
  3681. Return: CF clear if successful
  3682.     CF set on error
  3683.         EAX = error code
  3684.         09h invalid address or NOPAGE option set
  3685.         82h not compatible with DPMI
  3686. SeeAlso: AX=251Dh,AX=251Eh
  3687. --------E-212520-----------------------------
  3688. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  3689.     AX = 2520h
  3690.     DS:EDX -> pointer to buffer at least 100 bytes in size (see #01364)
  3691.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  3692. Return: carry flag clear
  3693.  
  3694. Format of Phar Lap VM statistics buffer:
  3695. Offset    Size    Description    (Table 01364)
  3696.  00h    DWORD    VM status
  3697.         0001h VM subsystem is present
  3698.         0000h VM not present
  3699.  04h    DWORD    "nconvpg" number of conventional memory pages available
  3700.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  3701.  0Ch    DWORD    "nextpg" total number of extended memory pages
  3702.  10h    DWORD    "extlim" extender memory pages limit
  3703.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  3704.  18h    DWORD    "alockpg" number of locked pages owned by application
  3705.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  3706.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  3707.  24h    DWORD    linear address of beginning of application address space
  3708.  28h    DWORD    linear address of end of application address space
  3709.  2Ch    DWORD    number of seconds since last time VM stats were reset
  3710.  30h    DWORD    number of page faults since last time
  3711.  34h    DWORD    number of pages written to swap file since last time
  3712.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  3713.  3Ch    DWORD    number of virtual pages allocated to the application
  3714.  40h    DWORD    size in pages of swap file
  3715.  44h    DWORD    number of system pages allocated with EMS calls
  3716.  48h    DWORD    minimum number of conventional memory pages
  3717.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  3718.  50h    DWORD    "vmflags"
  3719.         bit 0 = 1 if page fault in progress
  3720. ---v4.0+ ---
  3721.  54h    DWORD    number of physical pages guaranteed to be free
  3722.  58h    DWORD    number of free physical pages currently available
  3723.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  3724.           swap space)
  3725.  60h    DWORD    reserved
  3726. --------E-212521-----------------------------
  3727. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  3728.     AX = 2521h
  3729.     EBX = max 4k pages of physical extended memory which program may use
  3730. Return: CF clear if successful
  3731.        EBX = maximum limit in pages
  3732.        ECX = minimum limit in pages
  3733.     CF set on error
  3734.         EAX = error code
  3735.         08h insufficient memory or -nopage switch used
  3736. SeeAlso: AX=2522h
  3737. --------E-212522-----------------------------
  3738. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  3739.     AX = 2522h
  3740.     ES:EBX -> alternate handler for page faults
  3741. Return: CF clear
  3742.     ES:EBX -> previous page-fault handler
  3743. SeeAlso: AX=2523h
  3744. --------E-212523-----------------------------
  3745. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  3746.     AX = 2523h
  3747.     ???
  3748. Return: ???
  3749. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  3750.       pointer as arguments
  3751. SeeAlso: AX=2522h
  3752. --------E-212524-----------------------------
  3753. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  3754.     AX = 2524h
  3755.     ???
  3756. Return: ???
  3757. Note:    this function takes three DWORD pointers and three DWORD pointers to
  3758.       DWORD pointers as arguments
  3759. --------E-212525-----------------------------
  3760. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  3761.     AX = 2525h
  3762.     EBX = limit in 4k pages of physical conventional memory which program
  3763.           may use
  3764. Return: CF clear if successful
  3765.         EBX = maximum limit in pages
  3766.         ECX = minimum limit in pages
  3767.     CF set on error
  3768.         EAX = error code
  3769.         08h insufficient memory or -nopage switch used
  3770. SeeAlso: AX=2521h
  3771. --------E-212526-----------------------------
  3772. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  3773.     AX = 2526h
  3774.     ???
  3775. Return: ???
  3776. Notes:    details are not yet available
  3777.     this function takes a pointer to the configuration buffer (see #01365)
  3778.       and a poitner to a BYTE as arguments
  3779.  
  3780. Format of Phar Lap configuration buffer:
  3781. Offset    Size    Description    (Table 01365)
  3782.  00h    DWORD    flags 1 (see #01366)
  3783.  04h    DWORD    flags 2 (unused through v5.0)
  3784.  08h    DWORD    flags 3 (unused through v5.0)
  3785.  0Ch    DWORD    386|DOS-Extender major version
  3786.  10h    DWORD    386|DOS-Extender minor version
  3787.  14h    DWORD    first letter of text after minor version number in version str
  3788.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  3789.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  3790.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  3791.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  3792.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  3793.  2Ch    DWORD    machine class
  3794.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  3795.         NEC: 0=normal mode, 1=high-res mode
  3796.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  3797.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  3798.  38h    DWORD    -MINREAL setting
  3799.  3Ch    DWORD    -MAXREAL setting
  3800.  40h    DWORD    -MINIBUF setting
  3801.  44h    DWORD    -MAXIBUF setting
  3802.  48h    DWORD    size in bytes of DOS call data buffer
  3803.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  3804.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  3805.  54h    DWORD    -REALBREAK setting
  3806.  58h    DWORD    -CALLBUFS
  3807.  5Ch    DWORD    -HWIVEC
  3808.  60h    DWORD    -PRIVEC
  3809.  64h    DWORD    -INTMAP
  3810.  68h    DWORD    -PRIMAP
  3811.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  3812.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  3813.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  3814.  78h    DWORD    -EXTLOW setting
  3815.  7Ch    DWORD    -EXTHIGH setting
  3816.  80h    DWORD    lowest physical extended-memory address allocatable
  3817.  84h    DWORD    highest physical extended-memory address allocatable + 1
  3818.  88h    DWORD    special memory's physical base address (00000000h if none)
  3819.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  3820.  90h    DWORD    -MAXVCPIMEM setting
  3821.  94h    DWORD    -VSCAN
  3822.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  3823.  9Ch    DWORD    -CODESIZE setting
  3824.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  3825.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  3826.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  3827.  ACh    DWORD    number of GDT entries (-NGDTENT)
  3828.  B0h    DWORD    number of LDT entries (-NLDTENT)
  3829.  B4h    DWORD    program's privilege level (0-3)
  3830. ---386|DOS-Extender v3.0+ ---
  3831.  B8h    DWORD    -LOCKSTACK setting
  3832.  BCh    DWORD    -MAXEXTMEM
  3833.  C0h    DWORD    -MAXXMSMEM
  3834.  C4h    DWORD    -MAXPGMMEM
  3835.  C8h    DWORD    -DATATHRESHOLD
  3836.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  3837.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  3838.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  3839.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  3840.  DCh    DWORD    DPMI major version
  3841.  E0h    DWORD    DPMI minor version
  3842.  E4h    DWORD    DPMI capabilities flags (see #01367)
  3843.  E8h    DWORD    VCPI major version
  3844.  ECh    DWORD    VCPI minor version
  3845.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  3846.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  3847.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  3848.  F8h    DWORD    XMS major version
  3849.  FCh    DWORD    XMS minor version
  3850. 100h    WORD    application's CS selector
  3851. 102h    WORD    application's DS selector
  3852. 104h    WORD    application's PSP selector
  3853. 106h    WORD    application's environment selector
  3854. 108h    WORD    selector mapping entire first megabyte
  3855. 10Ah    WORD    selector mapping text video memory
  3856. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  3857. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  3858. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  3859. 112h    WORD    reserved (0)
  3860. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  3861.           with no saved context
  3862. 118h    DWORD    size of LDT in bytes
  3863. ---386|DOS-Extender v5.0+ ---
  3864. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  3865. 120h    DWORD    Windows major version
  3866. 124h    DWORD    Windows minor version
  3867. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  3868. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  3869. 130h    DWORD    OS/2 major version
  3870. 134h    DWORD    OS/2 minor version
  3871. 138h 50 DWORDs    reserved (0)
  3872.  
  3873. Bitfields for flags 1:
  3874. Bit(s)    Description    (Table 01366)
  3875.  0    -NOPAGE specified
  3876.  1    -A20 specified
  3877.  2    -VDISK specified
  3878.  3    -XT specified
  3879.  4    -AT specified
  3880.  5    -MCA specified
  3881.  6    -EISA specified
  3882.  7    -NORMRES specified (NEC only)
  3883.  8    -HIGHRES specified (NEC only)
  3884.  9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  3885.  10    -NOVM specified
  3886.  11    -SAVEREGS specified
  3887.  12    unused (clear)
  3888.  13    -NOVCPI specified
  3889.  14    -NOMUL specified
  3890.  15    -NOBMCHK specified
  3891.  16    -NOSPCLMEM or -NOBIM
  3892.  17    -NOPGEXP specified
  3893.  18    -SWAPDEFDISK specified
  3894. ---v3.0+ ---
  3895.  19    -SAVEINTS specified
  3896.  20    -NOLOAD specified
  3897.  21    -PAGELOG specified
  3898.  22    -OPENDENY specified
  3899.  23    -ERRATA17 specified
  3900. ---v4.1+ ---
  3901.  24    -NESTDPMI specified
  3902.  25    -NONESTDPMI specified
  3903.  26    -NODPMI specified
  3904.  27    -NOPCDWEITEK specified
  3905. ---v4.2+ ---
  3906.  28    -WININT21 specified
  3907.  
  3908. Bitfields for DPMI capabilities flags:
  3909. Bit(s)    Description    (Table 01367)
  3910.  0    paging supported
  3911.  1    physical device mapping
  3912.  2    conventional memory mapping
  3913.  3    exceptions restartable
  3914. --------E-212527-----------------------------
  3915. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  3916.     AX = 2527h
  3917.     EBX = new status (00h disabled, 01h enabled)
  3918. Return: CF clear
  3919.     EBX = previous state save flag
  3920. SeeAlso: AX=2528h
  3921. --------E-212528-----------------------------
  3922. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  3923.     AX = 2528h
  3924.     DS:EBX -> buffer for registers (see #01368)
  3925. Return: CF clear if successful
  3926.         DS:EBX buffer filled
  3927.     CF set on error
  3928.         EAX = error code
  3929.         83h interrupt state save not enabled
  3930.         84h no active interrupt
  3931. SeeAlso: AX=2527h
  3932.  
  3933. Format of Phar Lap buffer for registers:
  3934. Offset    Size    Description    (Table 01368)
  3935.  00h  8 BYTEs    unused
  3936.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  3937.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  3938.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  3939.  34h    DWORD    EIP
  3940.  38h    DWORD    EFLAGS
  3941. --------E-212529-----------------------------
  3942. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  3943.     AX = 2529h
  3944.     ???
  3945. Return: ES:EBX -> parameter block (see #01369)
  3946.     ???
  3947. Note:    details not available at this time
  3948. SeeAlso: AX=252Ah
  3949.  
  3950. Format of Phar Lap program load parameter block:
  3951. Offset    Size    Description    (Table 01369)
  3952.  00h    DWORD    initial EIP
  3953.  04h    WORD    initial CS
  3954.  06h    DWORD    initial ESP
  3955.  0Ah    WORD    initial SS
  3956.  0Ch  4 WORDs    initial DS, ES, FS, GS
  3957.  14h    DWORD    minimum size in bytes of program segment
  3958.  18h    DWORD    bytes of additional memory allocated
  3959.  1Ch    DWORD    flags
  3960.         bit 0: child linked with -UNPRIVILEGED
  3961.         ---v6.0+ ---
  3962.         bit 1: child is PE file instead of .EXP
  3963.         bit 2: loaded file is a DLL
  3964.         bits 3-31 reserved
  3965. ---v6.0+ ---
  3966.  20h    DWORD    module handles (PE files only)
  3967.  24h  7 DWORDs    reserved (0)
  3968. --------E-21252A-----------------------------
  3969. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  3970.     AX = 252Ah
  3971.     DS:EDX -> ASCIZ program name
  3972.     ES:EBX -> parameter block (see #01363)
  3973.     ECX = size of LDT buffer in bytes
  3974.     ESI = bit flags
  3975.         bit 0: allow demand paging rather than loading entire program
  3976.         bit 1: demand page from swap file rather than from .EXP
  3977. Return: CF clear if successful
  3978.         EAX = VMM handle or FFFFFFFFh if none
  3979.         ECX = number of descriptors in LDT buffer
  3980.     CF set on error
  3981.         EAX = error code
  3982.         02h file error
  3983.             EBX = file error code (see #01370)
  3984.             ECX = DOS error code if EBX=1,2,3, or 8
  3985.         08h insufficient memory
  3986.             EBX = memory error code (see #01371)
  3987.         80h LDT buffer too small
  3988.         87h called twice without intervening call to AX=2531h
  3989. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  3990.  
  3991. (Table 01370)
  3992. Values for Phar Lap file error code:
  3993.  01h    DOS open error
  3994.  02h    DOS seek error
  3995.  03h    DOS read error
  3996.  04h    not an .EXP or .REX file
  3997.  05h    invalid file format
  3998.  06h    -OFFSET is not a multiple of 64K
  3999.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  4000.  08h    DOS error loading .EXE file
  4001.  
  4002. (Table 01371)
  4003. Values for Phar Lap memory error code:
  4004.  01h    out of physical memory
  4005.  02h    out of swap space
  4006.  04h    unable to change extended memory allocation
  4007.  05h    -MAXPGMMEM exceeded
  4008.  06h    insufficient low memory to REALBREAK value
  4009.  07h    insufficient low memory for PSP and environment
  4010. --------E-21252BBH00-------------------------
  4011. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  4012.     AX = 252Bh
  4013.     BH = 00h
  4014.     ???
  4015. Return: ???
  4016. --------E-21252BBH01-------------------------
  4017. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  4018.     AX = 252Bh
  4019.     BH = 01h
  4020.     ???
  4021. Return: ???
  4022. --------E-21252BBH02-------------------------
  4023. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  4024.     AX = 252Bh
  4025.     BH = 02h
  4026.     ???
  4027. Return: ???
  4028. --------E-21252BBH03-------------------------
  4029. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  4030.     AX = 252Bh
  4031.     BH = 03h
  4032.     ???
  4033. Return: ???
  4034. SeeAlso: AX=252Bh/BH=0Bh
  4035. --------E-21252BBH04-------------------------
  4036. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  4037.     AX = 252Bh
  4038.     BH = 04h
  4039.     ???
  4040. Return: ???
  4041. Note:    returns one word per page
  4042. SeeAlso: #01372
  4043.  
  4044. Bitfields for Phar Lap page information:
  4045. Bit(s)    Description    (Table 01372)
  4046.  7    mapped to read/write data file
  4047.  6    mapped to read-only data file
  4048.  5    swapped to disk
  4049.  4    locked
  4050.  3-0    page type
  4051.     0 unmapped
  4052.     1 allocated
  4053.     2 physical device page
  4054. --------E-21252B-----------------------------
  4055. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  4056.     AX = 252Bh
  4057.     BH = function
  4058.         05h lock pages
  4059.         06h unlock pages
  4060.     BL = address type
  4061.         00h linear address
  4062.         ECX = linear start address of memory region
  4063.         01h segmented address
  4064.         ES:ECX -> start of memory region
  4065.     EDX = size of memory region in bytes
  4066. Return: CF clear if successful
  4067.     CF set on error
  4068. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  4069.       using virtual memory, this function always succeeds
  4070. --------E-21252B-----------------------------
  4071. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  4072.     AX = 252Bh
  4073.     BH = function (07h,08h)
  4074.     ???
  4075. Return: ???
  4076. --------E-21252BBH09-------------------------
  4077. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  4078.     AX = 252Bh
  4079.     BH = 09h
  4080.     BL = subfunction
  4081.         00h get page table entry by linear address
  4082.         ECX = linear address for which to get page table entry
  4083.         01h get page table entry by logical address
  4084.         ES:ECX = address for which to get page table entry
  4085. Return: CF clear if successful
  4086.         EAX = page table entry
  4087.         EBX = additional page table information
  4088.     CF set on error
  4089.         EAX = error code
  4090.         0009h invalid address
  4091.         0082h running under DPMI
  4092. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  4093. --------E-21252BBH0A-------------------------
  4094. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  4095.     AX = 252Bh
  4096.     BH = 0Ah
  4097.     BL = subfunction
  4098.         00h set page table entry for linear address
  4099.         ECX = linear address for which to get page table entry
  4100.         01h set page table entry for logical address
  4101.         ES:ECX = address for which to get page table entry
  4102.     ESI = page table entry
  4103.     EDI = additional page table information
  4104. Return: CF clear if successful
  4105.     CF set on error
  4106.         EAX = error code
  4107.         0009h invalid address
  4108.         0082h running under DPMI
  4109. SeeAlso: AX=252Bh/BH=09h
  4110. --------E-21252BBH0B-------------------------
  4111. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  4112.     AX = 252Bh
  4113.     BH = 0Bh
  4114.     BL = subfunction
  4115.         00h by linear address
  4116.         ECX = linear address at which to map data file
  4117.         01h by logical address
  4118.         ES:ECX = logical address at which to map data file
  4119.     EDX = number of bytes to map
  4120.     DS:ESI -> mapping structure (see #01373)
  4121.     DS:EDI -> ASCIZ filename
  4122. Return: CF clear if successful
  4123.     CF set on error
  4124.         EAX = error code
  4125.         0002h file error
  4126.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  4127.             EDX = error code returned by DOS
  4128.         0009h invalid address
  4129.         0081h invalid parameters or 386|VMM not present
  4130.         0086h all 386|VMM file handles already in use
  4131. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  4132.  
  4133. Format of Phar Lap mapping structure:
  4134. Offset    Size    Description    (Table 01373)
  4135.  00h    DWORD    starting file offset to be mapped
  4136.  04h    DWORD    DOS file access and sharing modes (see #01403 at INT 21/AH=3Dh)
  4137. --------E-21252C-----------------------------
  4138. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  4139.     AX = 252Ch
  4140.     BX = segment selector
  4141.     ECX = number of 4K pages to add
  4142. Return: CF clear if successful
  4143.         EAX = offset in segment of beginning of unmapped pages
  4144.     CF set on error
  4145.         EAX = error code
  4146.         08h insufficent memory
  4147.         09h invalid selector
  4148.         82h not supported by current DPMI
  4149. --------E-21252D-----------------------------
  4150. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  4151.     AX = 252Dh
  4152.     EBX = VMM file handle
  4153. Return: CF clear if successful
  4154.     CF set on error
  4155.         EAX = error code (81h invalid VMM handle)
  4156. --------E-21252E-----------------------------
  4157. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  4158.     AX = 252Eh
  4159.     CL = direction (00h get parameters, 01h set parameters)
  4160.     DS:EBX -> parameter buffer (see #01374)
  4161. Return: CF clear if successful
  4162.     CF set on error
  4163.         EAX = error code (81h bad parameter value)
  4164.  
  4165. Format of Phar Lap VMM parameter buffer:
  4166. Offset    Size    Description    (Table 01374)
  4167.  00h    DWORD    flags
  4168.         bit 0: page fault logging enabled
  4169.         ---v5.0+ ---
  4170.         bit 1: swap extender to disk during DOS EXEC call
  4171.         bit 2: don't zero allocated memory
  4172.  04h    DWORD    scan period for page aging, in milliseconds
  4173.  08h    DWORD    maximum size (in bytes) to check on each page scan
  4174.  0Ch 52 BYTEs    unused
  4175. --------E-21252F-----------------------------
  4176. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  4177.     AX = 252Fh
  4178.     DS:EBX -> data to be written
  4179.     CX = size of data in bytes
  4180. Return: CF clear if successful
  4181.     CF set on error
  4182.         EAX = error code (85h no page log file or not 386/VMM)
  4183. --------E-212530-----------------------------
  4184. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  4185.     AX = 2530h
  4186.     ECX = size of data buffer in bytes (1024 to 65536)
  4187. Return: CF clear if successful
  4188.     CF set on error
  4189.         EAX = error code
  4190.         08h insufficient low memory
  4191.         81h invalid size
  4192. SeeAlso: AX=2517h
  4193. --------E-212531-----------------------------
  4194. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  4195.     AX = 2531h
  4196.     BX = segment selector
  4197.     ECX = direction (00h read, 01h write)
  4198.     DS:EDX -> 8-byte buffer for descriptor contents
  4199. Return: CF clear if successful
  4200.     CF set on error
  4201.         EAX = error code
  4202.         81h invalid selector
  4203.         82h DPMI running, or not a code or data segment
  4204. --------E-212532-----------------------------
  4205. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  4206.     AX = 2532h
  4207.     CL = exception number (00h-0Fh)
  4208. Return: CF clear if successful
  4209.         ES:EBX = CS:EIP of current exception handler
  4210.     CF set on error (CL > 0Fh)
  4211. Notes:    this call is also supported by the FlashTek X-32VM extender
  4212.     this function is incompatible with 386|VMM; use AX=2522h instead
  4213. SeeAlso: AX=2522h,AX=2533h
  4214. --------E-212533-----------------------------
  4215. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  4216.     AX = 2533h
  4217.     CL = exception number (00h-0Fh)
  4218.     DS:EDX = CS:EIP of new exception handler
  4219. Return: CF clear if successful
  4220.     CF set on error (CL > 0Fh)
  4221. Notes:    this call is also supported by the FlashTek X-32VM extender
  4222.     this function is incompatible with 386|VMM; use AX=2522h instead
  4223. SeeAlso: AX=2522h,AX=2532h
  4224. --------E-212534-----------------------------
  4225. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  4226.     AX = 2534h
  4227. Return: CF clear
  4228.     EAX = interrupt state (00h disabled, 01h enabled)
  4229. --------E-212535-----------------------------
  4230. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  4231.     AX = 2535h
  4232.     EBX = direction (00h read registers, 01h write)
  4233.     DS:EDX -> system register record (see #01375)
  4234. Return: CF clear
  4235. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  4236.       installed
  4237.  
  4238. Format of Phar Lap system register record:
  4239. Offset    Size    Description    (Table 01375)
  4240.  00h    DWORD    CR0
  4241.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  4242.  14h  2 DWORDs    reserved
  4243.  1Ch  2 DWORDs    DR6,DR7
  4244.  24h  3 DWORDs    reserved
  4245. --------E-212536----------------------------
  4246. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  4247.     AX = 2536h
  4248.     EBX = bit flags
  4249.         bit 0: modifying conventional memory rather than extended memory
  4250.         bit 1: setting maximum memory usage rather than minimum
  4251.     ECX = new limit in 4K pages
  4252. Return: CF clear if successful
  4253.         EAX = new limit
  4254.     CF set on error
  4255.         EAX = error code (08h memory error or -NOPAGE set)
  4256.         EBX = maximum limit in pages
  4257.         ECX = minimum limit in pages
  4258. --------E-212537----------------------------
  4259. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  4260.     AX = 2537h
  4261.     BX = number of paragraphs to allocate
  4262. Return: CF clear if successful
  4263.         AX = real-mode segment of allocated block
  4264.     CF set on error
  4265.         AX = error code
  4266.         07h MS-DOS memory chain corrupted
  4267.         08h insufficient low memory
  4268.         BX = size in paragraphs of largest free block
  4269. SeeAlso: AH=48h
  4270. --------E-212538----------------------------
  4271. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  4272.     AX = 2538h
  4273.     DS:EBX -> buffer for registers (see #01368)
  4274.     ECX = register record to retrieve
  4275.         00h first interrupt state
  4276.         01h next interrupt state
  4277.         EDX = handle for current interrupt state
  4278. Return: CF clear if successful
  4279.         DS:EBX buffer filled
  4280.         EDX = handle of current interrupt state
  4281.         ESI = number of interrupt which occurred
  4282.     CF set on error
  4283.         EAX = error code
  4284.         81h invalid handle in EDX
  4285.         83h register saving not enabled
  4286.         84h no more interrupt states
  4287. SeeAlso: AX=2527h,AX=2528h
  4288. --------E-212539----------------------------
  4289. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  4290.     AX = 2539h
  4291.     BX = MS-DOS file handle for open file
  4292. Return: CF clear if successful
  4293.         EAX = offset of .EXP header in file
  4294.     CF set on error
  4295.         EAX = error code (02h file error)
  4296.         EBX = file error code
  4297.         02h DOS error seeking
  4298.         03h DOS error reading
  4299.         04h invalid file type
  4300.         05h invalid file format
  4301.         ECX = DOS error code if EBX=02h or 03h
  4302.     current file position in file modified
  4303. --------E-21253A----------------------------
  4304. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  4305.     AX = 253Ah
  4306.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  4307.         an error
  4308. Return: CF clear
  4309.     ES:EBX -> previous handler
  4310. SeeAlso: AH=4Ah
  4311. --------E-21253B----------------------------
  4312. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  4313.     AX = 253Bh
  4314.     DS:EBX -> buffer containing register contents (see #01368)
  4315. Return: never returns
  4316. SeeAlso: AX=2528h
  4317. --------E-21253C-----------------------------
  4318. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  4319.     AX = 253Ch
  4320. Return: CF clear
  4321.     EAX = old size of swap file in bytes
  4322.     EBX = new size of swap file in bytes
  4323. --------E-21253D-----------------------------
  4324. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  4325.     AX = 253Dh
  4326.     BL = interrupt number
  4327.     ECX = direction (0 = read, 1 = write)
  4328.     DS:EDX -> 8-byte buffer for descriptor
  4329. Return: CF clear if successful
  4330.         DS:EDX filled if reading
  4331.     CF set on error
  4332.         EAX = error code (0082h if running under DPMI)
  4333. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  4334.       shadow IDT
  4335. Notes:    this call will always fail under DPMI because it is not possible to
  4336.       access the IDT
  4337.     the descriptor is not checked when writing
  4338.     this call can normally be used only by programs running in ring 0
  4339.       because the processor does not allow an interrupt to be vectored to
  4340.       a less privileged ring
  4341. --------E-21253F-----------------------------
  4342. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - ALLOCATE LDT DESCRIPTOR
  4343.     AX = 253Fh
  4344.     BX = LDT descriptor to allocate (0000h for any)
  4345.     ???
  4346. Return: ???
  4347. --------E-212540-----------------------------
  4348. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FORCE ALIAS OF SEGMENT
  4349.     AX = 2540h
  4350.     ???
  4351. Return: ???
  4352. --------E-212544-----------------------------
  4353. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FREE DLL
  4354.     AX = 2544h
  4355.     ???
  4356. Return: ???
  4357. --------E-212545-----------------------------
  4358. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET/SET PROCEDURE ADDRESS
  4359.     AX = 2545h
  4360.     ECX = direction (00h get, 01h set)
  4361.     ???
  4362. Return: ???
  4363. --------E-212546-----------------------------
  4364. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET MODULE HANDLE
  4365.     AX = 2546h
  4366.     ???
  4367. Return: ???
  4368. --------E-2125C0-----------------------------
  4369. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  4370.     AX = 25C0h
  4371.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  4372. Return: CF clear if successful
  4373.         AX = real-mode paragraph address of memory
  4374.     CF set on error
  4375.         AX = error code
  4376.         07h MS-DOS memory control blocks destroyed
  4377.         08h insufficient memory
  4378.         BX = size in paragraphs of largest available memory block
  4379. SeeAlso: AX=25C1h,AX=25C2h
  4380. --------E-2125C1-----------------------------
  4381. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  4382.     AX = 25C1h
  4383.     CX = real-mode paragraph address of memory block to free
  4384. Return: CF clear if successful
  4385.         EAX destroyed
  4386.     CF set on error
  4387.         AX = error code
  4388.         07h MS-DOS memory control blocks destroyed
  4389.         09h invalid memory block address in CX
  4390. SeeAlso: AX=25C0h,AX=25C2h
  4391. --------E-2125C2-----------------------------
  4392. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  4393.     AX = 25C2h
  4394.     BX = new requested block size in paragraphs
  4395.     CX = real-mode paragraph address of memory block to modify
  4396. Return: CF clear if successful
  4397.         EAX destroyed
  4398.     CF set on error
  4399.         AX = error code
  4400.         07h MS-DOS memory control blocks destroyed
  4401.         08h insufficient memory
  4402.         09h invalid memory block address in CX
  4403.         BX = size in paragraphs of largest available memory block
  4404. SeeAlso: AX=25C0h,AX=25C1h
  4405. --------E-2125C3-----------------------------
  4406. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  4407.     AX = 25C3h
  4408.     ES:EBX -> pointer to parameter block (see #01377)
  4409.     DS:EDX -> pointer to ASCIZ program filename
  4410. Return: CF clear if successful
  4411.         all registers unchanged
  4412.     CF set on error
  4413.         EAX = error code (see #01376)
  4414.  
  4415. (Table 01376)
  4416. Values for Phar Lap error code:
  4417.  01h    function code in AL is invalid ???
  4418.  02h    file not found or path invalid
  4419.  05h    access denied
  4420.  08h    insufficient memory to load program
  4421.  0Ah    environment invalid
  4422.  0Bh    invalid file format
  4423.  
  4424. Format of parameter block:
  4425. Offset    Size    Description    (Table 01377)
  4426.  00h    DWORD    32-bit offset of environment string
  4427.  04h    WORD    segment selector of environment string
  4428.  06h    DWORD    32-bit offset of command-tail string
  4429.  0Ah    WORD    segment selector of command-tail string
  4430. --------D-2126-------------------------------
  4431. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  4432.     AH = 26h
  4433.     DX = segment at which to create PSP (see #01378)
  4434. Return: AL destroyed
  4435. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  4436.       taken from interrupt vector table; the parent PSP field is set to 0
  4437.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  4438.       copy
  4439. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  4440.  
  4441. Format of Program Segment Prefix (PSP):
  4442. Offset    Size    Description    (Table 01378)
  4443.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  4444.         the CDh 20h here is often used as a signature for a valid PSP
  4445.  02h    WORD    segment of first byte beyond memory allocated to program
  4446.  04h    BYTE    (DOS) unused filler
  4447.         (OS/2) count of fake DOS version returns
  4448.  05h    BYTE    CP/M CALL 5 service request (FAR CALL to absolute 000C0h)
  4449.         BUG: (DOS 2+ DEBUG) PSPs created by DEBUG point at 000BEh
  4450.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  4451.  08h  2 BYTEs    remainder of FAR JMP at 05h
  4452.  0Ah    DWORD    stored INT 22 termination address
  4453.  0Eh    DWORD    stored INT 23 control-Break handler address
  4454.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  4455.  16h    WORD    segment of parent PSP
  4456.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  4457.  2Ch    WORD    DOS 2+ segment of environment for process (see #01379)
  4458.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  4459.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  4460.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  4461.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  4462.         used by SHARE in DOS 3.3
  4463.  3Ch    BYTE    DOS 4+ (DBCS) interim console flag (see AX=6301h)
  4464.         Novell DOS 7 DBCS interim flag as set with AX=6301h
  4465.         (possibly also used by Far East MS-DOS 3.2-3.3)
  4466.  3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h)
  4467.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  4468.         (OS/2) capabilities flag
  4469.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  4470.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  4471.  42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list
  4472.         Windows keeps a linked list of Windows programs only
  4473.  44h    WORD    (MSWindows3) "PDB_Partition"
  4474.  46h    WORD    (MSWindows3) "PDB_NextPDB"
  4475.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  4476.  49h    BYTE    unused by DOS versions <= 6.00
  4477.  4Ch    WORD    (MSWindows3) "PDB_EntryStack"
  4478.  4Eh  2 BYTEs    unused by DOS versions <= 6.00
  4479.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  4480.  53h  2 BYTEs    unused in DOS versions <= 6.00
  4481.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  4482.           into an extended FCB
  4483.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  4484.         overwrites second FCB if opened
  4485.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  4486.           overwrites beginning of commandline if opened
  4487.  7Ch  4 BYTEs    unused
  4488.  80h 128 BYTEs    commandline / default DTA
  4489.         command tail is BYTE for length of tail, N BYTEs for the tail,
  4490.           followed by a BYTE containing 0Dh
  4491. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  4492.       allocating memory for a new open file table, filling it with FFh,
  4493.       copying the first 20 bytes from the default table, and adjusting the
  4494.       pointer and count at 34h and 32h.  However, DOS will only copy the
  4495.       first 20 file handles into a child PSP (including the one created on
  4496.       EXEC).
  4497.     in an OS/2 DOS box, values of D0h-FEh in the open file table indicate
  4498.       device drivers
  4499.     network redirectors based on the original MS-Net implementation use
  4500.       values of 80h-FEh in the open file table to indicate remote files;
  4501.       Novell NetWare also uses values from FEh down to 80h or one more than
  4502.       FILES= (whichever is greater) to indicate remote files (except on
  4503.       OS/2, where is uses CFh down to 80h)
  4504.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  4505.       high; the first FCB is empty and the second contains the first
  4506.       parameter
  4507.     some DOS extenders place protected-mode values in various PSP fields
  4508.       such as the "parent" field, which can confuse PSP walkers.  Always
  4509.       check either for the CDh 20h signature or that the suspected PSP is
  4510.       at the beginning of a memory block which owns itself (the preceding
  4511.       paragraph should be a valid MCB with "owner" the same as the
  4512.       suspected PSP).
  4513.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  4514.       checking that a legal PSP segment is current; see AH=50h for further
  4515.       discussion
  4516.     for 4DOS and Windows95, the command tail may be more than 126
  4517.       characters; in that case, the length byte will be set to 7Fh (with
  4518.       an 0Dh in the     127th position at offset FFh), and the first 126
  4519.       characters will be stored in the PSP, with the entire command line
  4520.       in the environment variable CMDLINE; under at least some versions
  4521.       of 4DOS, the byte at offset FFh is *not* set to 0Dh, so there is no
  4522.       terminating carriage return in the PSP's command tail.
  4523.  
  4524. Format of environment block:
  4525. Offset    Size    Description    (Table 01379)
  4526.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  4527.       N BYTEs    second environment variable, ASCIZ string
  4528.     ...
  4529.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  4530.     BYTE    00h
  4531. ---DOS 3.0+ ---
  4532.     WORD    number of strings following environment (normally 1)
  4533.       N BYTEs    ASCIZ full pathname of program owning this environment
  4534.         other strings may follow
  4535. --------D-2127-------------------------------
  4536. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  4537.     AH = 27h
  4538.     CX = number of records to read
  4539.     DS:DX -> opened FCB (see #01345)
  4540. Return: AL = status
  4541.         00h successful, all records read
  4542.         01h end of file, no data read
  4543.         02h segment wrap in DTA, no data read
  4544.         03h end of file, partial read
  4545.     Disk Transfer Area filled with records read from file
  4546.     CX = number of records read (return AL = 00h or 03h)
  4547. Notes:    read begins at current file position as specified in FCB; the file
  4548.       position is updated after reading
  4549.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  4550. SeeAlso: AH=21h,AH=28h,AH=3Fh"DOS"
  4551. --------D-2128-------------------------------
  4552. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  4553.     AH = 28h
  4554.     CX = number of records to write
  4555.     DS:DX -> opened FCB (see #01345)
  4556.     Disk Transfer Area contains records to be written
  4557. Return: AL = status
  4558.         00h successful
  4559.         01h disk full or file read-only
  4560.         02h segment wrap in DTA
  4561.     CX = number of records written
  4562. Notes:    write begins at current file position as specified in FCB; the file
  4563.       position is updated after writing
  4564.     if CX = 0000h on entry, no data is written; instead the file size is
  4565.       adjusted to be the same as the file position specified by the random
  4566.       record and record size fields of the FCB
  4567.     if the data to be written is less than a disk sector, it is copied into
  4568.       a DOS disk buffer, to be written out to disk at a later time
  4569.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  4570. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h/BX=0000h
  4571. --------D-2129-------------------------------
  4572. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  4573.     AH = 29h
  4574.     AL = parsing options (see #01380)
  4575.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  4576.     ES:DI -> buffer for unopened FCB
  4577. Return: AL = result code
  4578.         00h successful parse, no wildcards encountered
  4579.         01h successful parse, wildcards present
  4580.         FFh failed (invalid drive specifier)
  4581.     DS:SI -> first unparsed character
  4582.     ES:DI buffer filled with unopened FCB (see #01345)
  4583. Notes:    asterisks expanded to question marks in the FCB
  4584.     all processing stops when a filename terminator is encountered
  4585.     cannot be used with filespecs which include a path (DOS 2+)
  4586.     Novell NetWare monitors the result code since an 'invalid drive' may
  4587.       signal an attempt to reconnect a network drive; if there are no
  4588.       connections to the specified drive, NetWare attempts to build a
  4589.       connection and map the drive to the SYS:LOGIN directory
  4590. SeeAlso: AH=0Fh,AH=16h,AH=26h
  4591.  
  4592. Bitfields for parsing options:
  4593. Bit(s)    Description    (Table 01380)
  4594.  0    skip leading separators
  4595.  1    use existing drive number in FCB if no drive is specified, instead of
  4596.       setting field to zero
  4597.  2    use existing filename in FCB if no base name is specified, instead of
  4598.       filling field with blanks
  4599.  3    use existing extension in FCB if no extension is specified, instead of
  4600.       filling field with blanks
  4601.  4-7    reserved (0)
  4602. --------D-212A-------------------------------
  4603. INT 21 - DOS 1+ - GET SYSTEM DATE
  4604.     AH = 2Ah
  4605. Return: CX = year (1980-2099)
  4606.     DH = month
  4607.     DL = day
  4608. ---DOS 1.10+---
  4609.     AL = day of week (00h=Sunday)
  4610. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h"Novell",INT 1A/AH=04h,INT 2F/AX=120Dh
  4611. --------D-212B-------------------------------
  4612. INT 21 - DOS 1+ - SET SYSTEM DATE
  4613.     AH = 2Bh
  4614.     CX = year (1980-2099)
  4615.     DH = month (1-12)
  4616.     DL = day (1-31)
  4617. Return: AL = status
  4618.         00h successful
  4619.         FFh invalid date, system date unchanged
  4620. Note:    DOS 3.3+ also sets CMOS clock; due to the limitations of the CLOCK$
  4621.       driver interface, the CMOS time is also updated to the current
  4622.       DOS time (which is the BIOS time-of-day clock with the default
  4623.       CLOCK$ driver)
  4624. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  4625. --------E-212B--CX4149-----------------------
  4626. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  4627.     AH = 2Bh
  4628.     CX = 4149h ('AI')
  4629.     DX = 413Fh ('A?')
  4630. Return: AL <> FFh if installed
  4631. Note:    Borland's TKERNEL makes this call
  4632. --------c-212B--CX4358-----------------------
  4633. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  4634.     AH = 2Bh
  4635.     CX = 4358h ('CX')
  4636. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  4637.     AL = 00h if installed
  4638.         CF clear
  4639.         CX = 6378h ('cx')
  4640.         BX = ???
  4641.         DX = version (DH = major version, DL = binary minor version)
  4642. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  4643.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  4644.       to PC-Kwik v3.20)
  4645. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  4646. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  4647. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  4648. --------Q-212B--CX4445-----------------------
  4649. INT 21 - DESQview - INSTALLATION CHECK
  4650.     AH = 2Bh
  4651.     CX = 4445h ('DE')
  4652.     DX = 5351h ('SQ')
  4653.     AL = subfunction (DV v2.00+)
  4654.         01h get version
  4655.         Return: BX = version (BH = major, BL = minor)
  4656.         Note: early copies of v2.00 return 0002h
  4657.         02h get shadow buffer info, and start shadowing
  4658.         Return: BH = rows in shadow buffer
  4659.             BL = columns in shadow buffer
  4660.             DX = segment of shadow buffer
  4661.         04h get shadow buffer info
  4662.         Return: BH = rows in shadow buffer
  4663.             BL = columns in shadow buffer
  4664.             DX = segment of shadow buffer
  4665.         05h stop shadowing
  4666. Return: AL = FFh if DESQview not installed
  4667. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  4668.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  4669.       01h for all subfunction requests 0Ch and higher and appears to ignore
  4670.       all lower-numbered functions not listed here.
  4671.     DESQview versions 2.50-2.52 are part of DESQview/X v1.0x; version 2.53
  4672.       is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X
  4673.       v2.00.
  4674. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  4675. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  4676. --------U-212B--CX454C-----------------------
  4677. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  4678.     AH = 2Bh
  4679.     CX = 454Ch ('EL')
  4680.     DX = 5253h ('RS')
  4681. Return: ES:BX -> ELRES history structure (see #01381)
  4682.     DX = DABEh (signature, DAve BEnnett)
  4683. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  4684.       Bennett which stores recent errorlevel values, allows them to be
  4685.       retrieved for use in batch files, and can place them in an
  4686.       environment variable
  4687. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  4688.  
  4689. Format of ELRES history structure:
  4690. Offset    Size    Description    (Table 01381)
  4691.  00h    WORD    number of return codes which can be stored by following buffer
  4692.  02h    WORD    current position in buffer (treated as a ring)
  4693.  04h  N BYTEs    ELRES buffer
  4694. --------l-212B00CX5643-----------------------
  4695. INT 21 - The Volkov Commander - GET POINTER TO LEFT PANEL DATA STRUCTURE
  4696.     AX = 2B00h
  4697.     CX = 5643h ('VC')
  4698.     DX = 4F4Dh ('OM')
  4699. Return: AL = 0
  4700.     ES:BX -> left panel data structure
  4701. Program: Volcov Commander is a shell for MS-DOS by Vsevolod V. Volkov
  4702. SeeAlso: AX=2B01h/CX=5643h,AX=2B02h/CX=5643h
  4703. --------l-212B01CX5643-----------------------
  4704. INT 21 - The Volkov Commander - GET POINTER TO RIGHT PANEL DATA STRUCTURE
  4705.     AX = 2B01h
  4706.     CX = 5643h ('VC')
  4707.     DX = 4F4Dh ('OM')
  4708. Return: AL = 0
  4709.     ES:BX -> right panel data structure
  4710. SeeAlso: AX=2B00h/CX=5643h,AX=2B02h/CX=5643h
  4711. --------l-212B02CX5643-----------------------
  4712. INT 21 - The Volkov Commander - GET POINTER TO GLOBAL VARIABLES
  4713.     AX = 2B02h
  4714.     CX = 5643h ('VC')
  4715.     DX = 4F4Dh ('OM')
  4716. Return: AL = 0
  4717.     ES:BX -> global variables
  4718. SeeAlso: AX=2B00h/CX=5643h,AX=2B01h/CX=5643h
  4719. --------m-212B01CX444D-----------------------
  4720. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  4721.     AX = 2B01h
  4722.     CX = 444Dh ('DM')
  4723.     DX = 4158h ('AX')
  4724. Return: AX = 0000h if installed
  4725.         BX = DOS-UP version (BH = minor, BL = major)
  4726.         CX = 4845h ('HE')
  4727.         DX = 5245h ('RE')
  4728.         ES = DOS-UP driver segment
  4729. --------T-212B01CX5441-----------------------
  4730. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  4731.     AX = 2B01h
  4732.     CX = 5441h ('TA')
  4733.     DX = 4D45h ('ME')
  4734. ---v2.60---
  4735.     BH = ???
  4736.         00h skip ???, else do
  4737. Return: AL = 02h if installed
  4738.     ES:DX -> data area in TAME-RES (see #01382,#01386,#01388)
  4739. Program: TAME is a shareware program by David G. Thomas which gives up CPU
  4740.       time to other partitions under a multitasker when the current
  4741.       partition's program incessantly polls the keyboard or system time
  4742.  
  4743. Format of TAME 2.10-2.20 data area:
  4744. Offset    Size    Description    (Table 01382)
  4745.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  4746.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  4747.  02h    DWORD    number of task switches
  4748.  06h    DWORD    number of keyboard polls
  4749.  0Ah    DWORD    number of time polls
  4750.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4751.  12h    DWORD    original INT 10h
  4752.  16h    DWORD    original INT 14h
  4753.  1Ah    DWORD    original INT 15h
  4754.  1Eh    DWORD    original INT 16h
  4755.  22h    DWORD    original INT 17h
  4756.  26h    DWORD    original INT 21h
  4757.  2Ah    DWORD    original INT 28h
  4758.  2Eh    WORD    offset of TAME INT 10h handler
  4759.  30h    WORD    offset of TAME INT 14h handler
  4760.  32h    WORD    offset of TAME INT 15h handler
  4761.  34h    WORD    offset of TAME INT 16h handler
  4762.  36h    WORD    offset of TAME INT 17h handler
  4763.  38h    WORD    offset of TAME INT 21h handler
  4764.  3Ah    WORD    offset of TAME INT 28h handler
  4765.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  4766.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  4767.  40h    WORD    number of polls remaining before next task switch
  4768.  42h    WORD    /KEYIDLE value
  4769.  44h    BYTE    interrupts already grabbed by TAME (see #01383)
  4770.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  4771.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  4772.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  4773.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  4774.  49h    BYTE    window or task number for this task
  4775.  4Ah    BYTE    multitasker type (see #01384)
  4776.  4Bh    BYTE    type of task switching selected
  4777.         bit 0: DESQview???
  4778.         bit 1: DoubleDOS???
  4779.         bit 2: TopView???
  4780.         bit 3: KeySwitch
  4781.         bit 4: HLT instruction
  4782.  4Ch    BYTE    ???
  4783.  4Dh    BYTE    flags
  4784.         bit 1: /FREQ instead of /MAX
  4785.  4Eh    BYTE    /FG: value
  4786.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  4787.  50h    BYTE    ???
  4788.  
  4789. Bitfields for interrupts already grabbed by TAME:
  4790. Bit(s)    Description    (Table 01383)
  4791.  0    INT 10h
  4792.  1    INT 14h
  4793.  2    INT 15h
  4794.  3    INT 16h
  4795.  4    INT 17h
  4796.  5    INT 21h
  4797.  6    INT 28h
  4798.  
  4799. (Table 01384)
  4800. Values for multitasker type:
  4801.  01h    DESQview
  4802.  02h    DoubleDOS
  4803.  03h    TopView
  4804.  04h    OmniView
  4805.  05h    VM/386
  4806.  
  4807. Bitfields for type of task switching selected:
  4808. Bit(s)    Description    (Table 01385)
  4809.  0    DESQview
  4810.  1    DoubleDOS
  4811.  2    TopView
  4812.  3    OmniView
  4813.  4    KeySwitch
  4814.  5    HLT instruction
  4815.  
  4816. Format of TAME 2.30 data area:
  4817. Offset    Size    Description    (Table 01386)
  4818.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  4819.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  4820.  02h    DWORD    number of task switches
  4821.  06h    DWORD    number of keyboard polls
  4822.  0Ah    DWORD    number of time polls
  4823.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4824.  12h    DWORD    time of last /CLEAR or TAME-RES load
  4825.  16h    DWORD    time yielded
  4826.  1Ah    DWORD    time spent polling
  4827.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  4828.  22h    DWORD    original INT 10h
  4829.  26h    DWORD    original INT 14h
  4830.  2Ah    DWORD    original INT 15h
  4831.  2Eh    DWORD    original INT 16h
  4832.  32h    DWORD    original INT 17h
  4833.  36h    DWORD    original INT 21h
  4834.  3Ah    DWORD    original INT 28h
  4835.  3Eh    WORD    offset of TAME INT 10h handler
  4836.  40h    WORD    offset of TAME INT 14h handler
  4837.  42h    WORD    offset of TAME INT 15h handler
  4838.  44h    WORD    offset of TAME INT 16h handler
  4839.  46h    WORD    offset of TAME INT 17h handler
  4840.  48h    WORD    offset of TAME INT 21h handler
  4841.  4Ah    WORD    offset of TAME INT 28h handler
  4842.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  4843.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  4844.  50h    WORD    number of polls remaining before next task switch
  4845.  52h    WORD    /KEYIDLE value
  4846.  54h    WORD    /FG: value
  4847.  56h    WORD    task switches left until next FGONLY DESQview API call
  4848.  58h    WORD    multitasker version
  4849.  5Ah    WORD    virtual screen segment
  4850.  5Ch    BYTE    interrupts already grabbed by TAME (see #01383)
  4851.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  4852.  5Eh    BYTE    window or task number for this task
  4853.  5Fh    BYTE    multitasker type (see #01384)
  4854.  60h    BYTE    type of task switching selected (bit flags) (see #01385)
  4855.  61h    BYTE    watch_DOS
  4856.  62h    BYTE    action flags (see #01387)
  4857.  63h    BYTE    old status
  4858.  64h    WORD    signature DA34h
  4859.  
  4860. Bitfields for TAME action flags:
  4861. Bit(s)    Description    (Table 01387)
  4862.  0    TAME enabled
  4863.  1    /FREQ instead of /MAX (X and Y count fields are per tick)
  4864.  2    /TIMEPOLL
  4865.  3    /KEYPOLL
  4866.  4    inhibit timer
  4867.  5    enable status monitoring
  4868. SeeAlso: #01386,#01388
  4869.  
  4870. Format of TAME 2.60 data area:
  4871. Offset    Size    Description    (Table 01388)
  4872.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  4873.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  4874.  02h    DWORD    number of task switches
  4875.  06h    DWORD    number of keyboard polls
  4876.  0Ah    DWORD    number of time polls
  4877.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  4878.  12h    DWORD    time of last /CLEAR or TAME-RES load
  4879.  16h    DWORD    time yielded
  4880.  1Ah    DWORD    time spent polling
  4881.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  4882.  22h  4 BYTEs    ???
  4883.  26h    DWORD    original INT 10h
  4884.  2Ah    DWORD    original INT 14h
  4885.  2Eh    DWORD    original INT 15h
  4886.  32h    DWORD    original INT 16h
  4887.  36h    DWORD    original INT 17h
  4888.  3Ah    DWORD    original INT 21h
  4889.  3Eh    DWORD    original INT 28h
  4890.  42h    WORD    offset of TAME INT 10h handler
  4891.  44h    WORD    offset of TAME INT 14h handler
  4892.  46h    WORD    offset of TAME INT 15h handler
  4893.  48h    WORD    offset of TAME INT 16h handler
  4894.  4Ah    WORD    offset of TAME INT 17h handler
  4895.  4Ch    WORD    offset of TAME INT 21h handler
  4896.  4Eh    WORD    offset of TAME INT 28h handler
  4897.  50h    WORD    X in /max:X,Y or /freq:X,Y
  4898.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  4899.  54h    WORD    number of polls remaining before next task switch
  4900.  56h    WORD    /KEYIDLE value
  4901.  58h  4 BYTEs    ???
  4902.  5Ch    WORD    X in /boost:X,Y
  4903.  5Eh    WORD    Y in /boost:X,Y
  4904.  60h    WORD    /FG: value
  4905.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  4906.  64h    WORD    multitasker version ???
  4907.  66h    WORD    virtual screen segment
  4908.  68h    BYTE    interrupts already grabbed by TAME (see #01383)
  4909.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  4910.  6Ah    BYTE    window or task number for this task
  4911.  6Bh    BYTE    multitasker type (see #01384)
  4912.  6Ch    BYTE    type of task switching selected (bit flags) (see #01385)
  4913.  6Dh    BYTE    watch_DOS
  4914.  6Eh    BYTE    action flags (see #01387)
  4915.  6Fh    BYTE    old status
  4916.  70h    WORD    signature DA34h
  4917. --------v-212B16CX0643-----------------------
  4918. INT 21 - VIRUS - "Maltese Amoeba" - INSTALLATION CHECK
  4919.     AX = 2B16h
  4920.     CX = 0643h
  4921. Return: AX = 1603h if installed
  4922. --------R-212B44BX4D41-----------------------
  4923. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  4924.     AX = 2B44h ('D')
  4925.     BX = 4D41h ('MA')
  4926.     CX = 7063h ('pc')
  4927.     DX = 4157h ('AW')
  4928. Return: AX = resident program
  4929.         4F4Bh ('OK') if large host resident
  4930.         6F6Bh ('ok') if small host resident
  4931.     CX:DX -> API entry point (see #01389)
  4932. SeeAlso: INT 16/AH=79h
  4933.  
  4934. (Table 01389)
  4935. Call pcANYWHERE API entry point with:
  4936.     AX = 0000h get pcANYWHERE IV version
  4937.         DS:SI -> BYTE buffer for host type code
  4938.         Return: AH = version number
  4939.             AL = revision number
  4940.             DS:DI buffer byte filled with
  4941.             00h full-featured host
  4942.             01h limited-feature LAN host
  4943.             other API may not be supported
  4944.     AX = 0001h initialize operation
  4945.         DS:SI -> initialization request structure (see #01390)
  4946.         Return: AX = function status (see #01393)
  4947.     AX = 0002h get status
  4948.         Return: AH = current operating mode (see #01390)
  4949.             AL = current connection status (see #01392)
  4950.     AX = 0003h suspend remote screen updates
  4951.         Return: AX = function status (see #01393)
  4952.     AX = 0004h resume screen updates
  4953.         Return: AX = function status (see #01393)
  4954.     AX = 0005h end current remote access session
  4955.         DS:SI -> termination request structure (see #01391)
  4956.         Return: AX = function status (see #01393)
  4957.     AX = 0006h remove pcANYWHERE IV from memory
  4958.         Return: AX = status (see #01393)
  4959.     AX = 8000h read data from communications channel
  4960.         DS:BX -> buffer
  4961.         CX = buffer size
  4962.         Return: AX >= number of characters read/available
  4963.             AX < 0 on error
  4964.     AX = 8001h write data to communications channel
  4965.         DS:BX -> buffer
  4966.         CX = buffer size
  4967.         Return: AX >= number of characters written
  4968.             AX < 0 on error
  4969.     AX = 8002h get connection status
  4970.         Return: AX = status
  4971.             > 0000h if connection active
  4972.             = 0000h if connection lost
  4973.             < 0000h on error
  4974.  
  4975. Format of pcANYWHERE initialization request structure:
  4976. Offset    Size    Description    (Table 01390)
  4977.  00h    BYTE    operating mode
  4978.         00h wait for a call
  4979.         01h hot key activates
  4980.         02h incoming call activates
  4981.         03h initiate a call
  4982.  01h  3 BYTEs    user ID to append to config file names
  4983.  04h    WORD    DS-relative pointer to path for config files
  4984.  06h    WORD    DS-relative pointer to path for program files
  4985.  
  4986. Format of pcANYWHERE termination request structure:
  4987. Offset    Size    Description    (Table 01391)
  4988.  00h    BYTE    operating mode after termination
  4989.         00h wait for a call
  4990.         01h hot key activates
  4991.         02h incoming call activates
  4992.         80h use current mode
  4993.         FFh remove from memory
  4994.  
  4995. Bitfields for current connection status:
  4996. Bit(s)    Description    (Table 01392)
  4997.  0    a physical connection is active
  4998.  1    remove screen updating is active
  4999.  2    connection checking is active
  5000.  3    hot key detection is active
  5001.  4    background file transfer is active
  5002.  
  5003. (Table 01393)
  5004. Values for pcANYWHERE function status:
  5005.  0000h    function completed successfully
  5006.  FFD1h    unable to release interrupt vectors
  5007.  FFD2h    unable to release allocated memory
  5008.  FFF2h    unable to establish a connection when operating mode is
  5009.       "Initiate a call"
  5010.  FFF3h    modem configuration is invalid (corrupt config)
  5011.  FFF4h    modem initialization failed (no modem response)
  5012.  FFF5h    the communications device could not be initialized
  5013.  FFF6h    the host operator aborted the function
  5014.  FFF7h    the communications driver type specified in the configuration file is
  5015.       different than the one loaded when pcANYWHERE IV was started
  5016.  FFF9h    the configuration file is invalid
  5017.  FFFAh    the configuration file could not be found
  5018.  FFFBh    no session is active
  5019.  FFFCh    a remote access session is active
  5020.  FFFDh    the specified operating mode is invalid
  5021. --------l-212B--CX5643-----------------------
  5022. INT 21 - Volkov Commander - INSTALLATION CHECK
  5023.     AH = 2Bh
  5024.     CX = 5643h ('VC')
  5025.     DX = 4F4Dh ('OM')
  5026.     AL = function number
  5027.         00h get left window data address
  5028.         01h get right window data address
  5029.         02h get address of general variables
  5030. Return: AL = 00h if Volkov Commander installed
  5031.         AH = version code (27h for v4.00.039)
  5032.         ES:BX -> requested data
  5033. Program: Volkov Commander is a Norton Commander-like DOS shell
  5034. --------G-212B--CX6269-----------------------
  5035. INT 21 - WDTSR.COM - INSTALLATION CHECK
  5036.     AH = 2Bh
  5037.     CX = 6269h ('bi')
  5038.     DX = 742Dh ('t-')
  5039. Return: AL = FFh if not installed
  5040.     AL = 77h ('w') if WDTSR is installed
  5041.         CX = 6174h ('at')
  5042.         DX = 6368h ('ch')
  5043.         ES = resident code segment
  5044.         ES:DI -> identification and configuration data
  5045. Program: WDTSR is a driver for the bitWatch watchdog hardware by bit-design
  5046.       GmbH
  5047. SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 14/AH=14h"FOSSIL",INT 15/AH=C3h
  5048. --------S-212B--CX6269-----------------------
  5049. INT 21 - bitFOSS - INSTALLATION CHECK
  5050.     AH = 2Bh
  5051.     CX = 6269h ('bi')
  5052.     DX = 7446h ('tF')
  5053. Return: AL = FFh if not installed
  5054.     AL = 4Fh ('O') if bitFOSS is installed
  5055.         CX = 5353h ('SS')
  5056.         DX = 494Ch ('IL')
  5057.         ES = resident code segment
  5058.         ES:DI -> identification data
  5059. Program: bitFOSS is a revision 5 FOSSIL driver
  5060. SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 11/AH=BCh
  5061. --------S-212B--CX6269-----------------------
  5062. INT 21 - bitFOSSI - INSTALLATION CHECK
  5063.     AH = 2Bh
  5064.     CX = 6269h ('bi')
  5065.     DX = 7449h ('tI')
  5066. Return: AL = FFh if not installed
  5067.     AL = 53h ('S') if bitFOSSI is installed
  5068.         CX = 444Eh ('DN')
  5069.         DX = 2D46h ('-F')
  5070.         ES = resident code segment
  5071.         ES:DI -> identification data
  5072. Program: bitFOSSI is a revision 5 FOSSIL driver for ???'s ISDN board
  5073. SeeAlso: AH=2Bh/CX=6269h"bitFOSS",INT 11/AH=BCh
  5074. --------D-212C-------------------------------
  5075. INT 21 - DOS 1+ - GET SYSTEM TIME
  5076.     AH = 2Ch
  5077. Return: CH = hour
  5078.     CL = minute
  5079.     DH = second
  5080.     DL = 1/100 seconds
  5081. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  5082.       so returned times generally do not increment by 1
  5083.     on some systems, DL may always return 00h
  5084. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h"Novell",INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  5085. SeeAlso: INT 2F/AX=120Dh
  5086. --------v-212C--------------------------
  5087. INT 21 - VIRUS - "Anti Pode 2.0" - INSTALLATION CHECK
  5088.     AH = 2Ch
  5089. Return: DL = F2h if resident
  5090. SeeAlso: AX=1812h"VIRUS",AX=2C2Ch
  5091. --------v-212C00CX534B-----------------------
  5092. INT 21 - SKUDO - INSTALLATION CHECK
  5093.     AX = 2C00h
  5094.     CX = 534Bh ('SK')
  5095.     DX = 5544h ('UD')
  5096.     BX = 4F21h ('O!')
  5097. Return: AX = 5349h ('SI') if installed
  5098.         CH = version number
  5099.         CL = subversion
  5100. Program: SKUDO is an antivirus TSR by Jordi Mas
  5101. --------v-212C2C------------------------
  5102. INT 21 - VIRUS - "LockJaw/Proto-T" - INSTALLATION CHECK
  5103.     AX = 2C2Ch
  5104. Return: AX = 0DCDh if resident
  5105. SeeAlso: AH=2Ch"VIRUS",AX=3000h"VIRUS"
  5106. --------D-212D-------------------------------
  5107. INT 21 - DOS 1+ - SET SYSTEM TIME
  5108.     AH = 2Dh
  5109.     CH = hour
  5110.     CL = minute
  5111.     DH = second
  5112.     DL = 1/100 seconds
  5113. Return: AL = result
  5114.         00h successful
  5115.         FFh invalid time, system time unchanged
  5116. Note:    DOS 3.3+ also sets CMOS clock; due to the limitations of the CLOCK$
  5117.       driver interface, the CMOS date is also updated to the current
  5118.       DOS date
  5119. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  5120. --------T-212D01CX7820-----------------------
  5121. INT 21 - PC-Mix - INSTALLATION CHECK
  5122.     AX = 2D01h
  5123.     CX = 7820h ('X ')
  5124.     DX = 6D69h ('MI')
  5125. Return: AL = 00h if installed
  5126. --------D-212E--DL00-------------------------
  5127. INT 21 - DOS 1+ - SET VERIFY FLAG
  5128.     AH = 2Eh
  5129.     DL = 00h (DOS 1.x/2.x only)
  5130.     AL = new state of verify flag
  5131.         00h off
  5132.         01h on
  5133. Notes:    default state at system boot is OFF
  5134.     when ON, all disk writes are verified provided the device driver
  5135.       supports read-after-write verification
  5136. SeeAlso: AH=54h
  5137. --------D-212F-------------------------------
  5138. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  5139.     AH = 2Fh
  5140. Return: ES:BX -> current DTA
  5141. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  5142. SeeAlso: AH=1Ah
  5143. --------D-2130-------------------------------
  5144. INT 21 - DOS 2+ - GET DOS VERSION
  5145.     AH = 30h
  5146. ---DOS 5+ ---
  5147.     AL = what to return in BH
  5148.         00h OEM number (as for DOS 2.0-4.0x)
  5149.         01h version flag
  5150. Return: AL = major version number (00h if DOS 1.x)
  5151.     AH = minor version number
  5152.     BL:CX = 24-bit user serial number (most versions do not use this)
  5153. ---if DOS <5 or AL=00h---
  5154.     BH = MS-DOS OEM number (see #01394)
  5155. ---if DOS 5+ and AL=01h---
  5156.     BH = version flag
  5157.         bit 3: DOS is in ROM
  5158.         other: reserved (0)
  5159. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  5160.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  5161.     OS/2 Warp 3.0 Virtual DOS Machines report v20.30; Warp 4 VDMs report
  5162.       v20.40.
  5163.     the WindowsNT DOS box returns version 5.00, subject to SETVER
  5164.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  5165.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  5166.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  5167.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  5168.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  5169.       IBM DOS 6.0)
  5170.     MS-DOS 6.21 reports its version as 6.20; version 6.22 returns the
  5171.       correct value
  5172.     Windows95 returns version 7.00 (the underlying MS-DOS), as did the
  5173.       "Chicago" beta (reported in _Microsoft_Systems_Journal_,August 1994);
  5174.       Windows95 OSR2 returns version 7.10
  5175.     DR DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports IBM v6.00,
  5176.       which some software displays as IBM DOS v6.10 (because of the version
  5177.       mismatch in true IBM DOS, as mentioned above).  The Novell DOS 7
  5178.       SETVER.EXE has an undocumented option /G x.y which sets the "global"
  5179.       DOS version returned by this function for all executables not given
  5180.       a specific version number in SETVER to major version x and minor
  5181.       version y.
  5182.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  5183.       as PC-DOS by returning OEM number 00h
  5184.     the version returned under DOS 4.0x may be modified by entries in
  5185.       the special program list (see #01662 at AH=52h); the version returned
  5186.       under DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  5187.       version number
  5188. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  5189. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=4010h,INT 2F/AX=4A33h,INT 2F/AX=E002h
  5190.  
  5191. (Table 01394)
  5192. Values for DOS OEM number:
  5193.  00h    IBM
  5194.  01h    Compaq
  5195.  02h    MS Packaged Product
  5196.  04h    AT&T
  5197.  05h    ZDS (Zenith Electronics)
  5198.  06h    Hewlett-Packard
  5199.  07h    ZDS (Groupe Bull)
  5200.  0Dh    Packard-Bell
  5201.  16h    DEC
  5202.  23h    Olivetti
  5203.  28h    Texas Instruments
  5204.  29h    Toshiba
  5205.  33h    Novell (Windows/386 device IDs only)
  5206.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  5207.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  5208.  4Dh    Hewlett-Packard
  5209.  5Eh    RxDOS
  5210.  66h    PhysTechSoft (PTS-DOS)
  5211.  99h    General Software's Embedded DOS
  5212.  EEh    DR DOS
  5213.  EFh    Novell DOS
  5214.  FDh    FreeDOS
  5215.  FFh    Microsoft, Phoenix
  5216. --------E-2130-------------------------------
  5217. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  5218.     AH = 30h
  5219.     EAX = 00003000h
  5220.     EBX = 50484152h ("PHAR")
  5221. Return: AL = major DOS version
  5222.     AH = minor DOS version
  5223.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  5224.         BL = ASCII major version number
  5225.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  5226.         EDX = address of GDA
  5227. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  5228. --------v-2130--DXABCD-----------------------
  5229. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  5230.     AH = 30h
  5231.     DX = ABCDh
  5232. Return: DX = DCBAh if installed
  5233. SeeAlso: AX=0D20h,AH=30h/SI=1234h,AX=3000h"VIRUS",AX=30F1h
  5234. --------v-2130--SI1234---------------------
  5235. INT 21 - VIRUS - "ANDROMEDA-758" -INSTALLATION CHECK
  5236.     AH = 30h
  5237.     SI = 1234h
  5238. Return: AX = FFDDh if resident
  5239. SeeAlso: AH=30h/DX=ABCDh,AX=3000h"VIRUS"
  5240. --------T-213000BX1234-----------------------
  5241. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  5242.     AX = 3000h
  5243.     BX = 1234h
  5244.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  5245. Return: AL = DOS major version
  5246.     AH = DOS minor version
  5247.     CX:BX -> Ctask global data block
  5248. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  5249. Note:    if first eight bytes of returned data block equal eight bytes passed
  5250.       in, CTask is resident
  5251. --------O-213000BX3000-----------------------
  5252. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  5253.     AX = 3000h
  5254.     BX = 3000h
  5255.     CX = DX = 3000h
  5256. Return: AX = PC-MOS version
  5257. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  5258.       system by The Software Link, Inc.
  5259. SeeAlso: AH=30h,INT D4/AH=02h,INT D4/AH=10h
  5260. --------v-213000BX614A------------------
  5261. INT 21 - VIRUS - "Jackal" - INSTALLATION CHECK
  5262.     AX = 3000h
  5263.     BX = 614Ah ('aJ')
  5264.     CX = 6B63h ('kc')
  5265.     DX = 6C61h ('la')
  5266. Return: BX = ???
  5267. SeeAlso: AX=2C2Ch"VIRUS",AX=3030h"VIRUS"
  5268. --------G-213022-----------------------------
  5269. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  5270.     AX = 3022h
  5271. Return: AX = DOS version (see AH=30h)
  5272.     CX = 1112h if StopPrg installed
  5273.         BX = segment of resident code
  5274. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  5275. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  5276.       0000h:04FEh
  5277. --------v-213030BX694D-----------------------
  5278. INT 21 - VIRUS - "IMTC" -INSTALLATION CHECK
  5279.     AX = 3030h
  5280.     BX = 694Dh
  5281. Return: DX = 7443h if resident
  5282. SeeAlso: AX=3000h/BX=614Ah"VIRUS",AX=3032h"VIRUS"
  5283. --------v-213032DX1234-----------------------
  5284. INT 21 - VIRUS - "Uruguay" - INSTALLATION CHECK
  5285.     AX = 3032h
  5286.     DX = 1234h
  5287. Return: AX = 5678h if resident
  5288. SeeAlso: AX=3030h"VIRUS",AX=30F1h"VIRUS"
  5289. --------v-2130F1-----------------------------
  5290. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  5291.     AX = 30F1h
  5292. Return: AL = 00h if resident
  5293. SeeAlso: AH=30h/DX=ABCDh,AX=3032h,AX=330Fh,AX=33DAh
  5294. ----------2130FFCX4445-----------------------
  5295. INT 21 - DESQ??? - INSTALLATION CHECK
  5296.     AX = 30FFh
  5297.     CX = 4445h ("DE")
  5298.     DX = 5351h ("SQ")
  5299. Return: BH = 05h if installed
  5300.     ???
  5301. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  5302.       DESQview, so it may be for DESQview's precursor DESQ.
  5303. SeeAlso: AX=4404h"DUBLDISK"
  5304. --------D-2131-------------------------------
  5305. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  5306.     AH = 31h
  5307.     AL = return code
  5308.     DX = number of paragraphs to keep resident
  5309. Return: never
  5310. Notes:    the value in DX only affects the memory block containing the PSP;
  5311.       additional memory allocated via AH=48h is not affected
  5312.     the minimum number of paragraphs which will remain resident is 11h
  5313.       for DOS 2.x and 06h for DOS 3.0+
  5314.     most TSRs can save some memory by releasing their environment block
  5315.       before terminating (see #01378 at AH=26h,AH=49h)
  5316.     any open files remain open, so one should close any files which will
  5317.       not be used before going resident; to access a file which is left
  5318.       open from the TSR, one must switch PSP segments first (see AH=50h)
  5319. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  5320. --------D-2132-------------------------------
  5321. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  5322.     AH = 32h
  5323.     DL = drive number (00h = default, 01h = A:, etc)
  5324. Return: AL = status
  5325.         00h successful
  5326.         DS:BX -> Drive Parameter Block (DPB) (see #01395) for specified
  5327.               drive
  5328.         FFh invalid or network drive
  5329. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  5330.       except for the DWORD at offset 12h
  5331.     this call updates the DPB by reading the disk; the DPB may be accessed
  5332.       via the DOS list of lists (see #01627 at AH=52h) if disk access is not
  5333.       desirable.
  5334.     undocumented prior to the release of DOS 5.0; only the DOS 4.0+
  5335.       version of the DPB has been documented, however
  5336.     supported by DR DOS 3.41+; DR DOS 3.41-6.0 return the same data as
  5337.       MS-DOS 3.31
  5338.     IBM ROM-DOS v4.0 also reports invalid/network (AL=FFh) on the ROM drive
  5339. SeeAlso: AH=1Fh,AH=52h,AX=7302h
  5340.  
  5341. Format of DOS Drive Parameter Block:
  5342. Offset    Size    Description    (Table 01395)
  5343.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  5344.  01h    BYTE    unit number within device driver
  5345.  02h    WORD    bytes per sector
  5346.  04h    BYTE    highest sector number within a cluster
  5347.  05h    BYTE    shift count to convert clusters into sectors
  5348.  06h    WORD    number of reserved sectors at beginning of drive
  5349.  08h    BYTE    number of FATs
  5350.  09h    WORD    number of root directory entries
  5351.  0Bh    WORD    number of first sector containing user data
  5352.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  5353.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  5354.  0Fh    BYTE    number of sectors per FAT
  5355.  10h    WORD    sector number of first directory sector
  5356.  12h    DWORD    address of device driver header (see #01646)
  5357.  16h    BYTE    media ID byte (see #01356)
  5358.  17h    BYTE    00h if disk accessed, FFh if not
  5359.  18h    DWORD    pointer to next DPB
  5360. ---DOS 2.x---
  5361.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  5362.         FFFFh = unknown
  5363.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  5364. ---DOS 3.x---
  5365.  1Ch    WORD    cluster at which to start search for free space when writing
  5366.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  5367. ---DOS 4.0-6.0---
  5368.  0Fh    WORD    number of sectors per FAT
  5369.  11h    WORD    sector number of first directory sector
  5370.  13h    DWORD    address of device driver header (see #01646)
  5371.  17h    BYTE    media ID byte (see #01356)
  5372.  18h    BYTE    00h if disk accessed, FFh if not
  5373.  19h    DWORD    pointer to next DPB
  5374.  1Dh    WORD    cluster at which to start search for free space when writing,
  5375.         usually the last cluster allocated
  5376.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  5377. SeeAlso: #01357,#01663,#01787 at AX=7302h,#04039 at INT E0/CL=71h
  5378. --------D-2133-------------------------------
  5379. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  5380.     AH = 33h
  5381.     AL = subfunction
  5382.         00h get current extended break state
  5383.         Return: DL = current state, 00h = off, 01h = on
  5384.         01h set state of extended ^C/^Break checking
  5385.         DL = new state
  5386.             00h off, check only on character I/O functions
  5387.             01h on, check on all DOS functions
  5388.         Return: (Novell DOS 7) DL = old state of extended Break checks
  5389. Note:    under DOS 3.1+ and DR DOS, this function does not use any of the
  5390.       DOS-internal stacks and may thus be called at any time
  5391. SeeAlso: AX=3302h
  5392. --------D-213302-----------------------------
  5393. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  5394.     AX = 3302h
  5395.     DL = new state (00h for OFF, 01h for ON)
  5396. Return: DL = old state of extended BREAK checking
  5397. Notes:    this function does not use any of the DOS-internal stacks and may thus
  5398.       be called at any time; one possible use is modifying Control-Break
  5399.       checking from within an interrupt handler or TSR
  5400.     not supported by DR DOS through version 6.0 (error code 01h);
  5401.       newly-supported by Novell DOS 7
  5402. SeeAlso: AH=33h
  5403. --------D-213303-----------------------------
  5404. INT 21 - DOS 4.0+ - UNUSED
  5405.     AX = 3303h
  5406. Return: nothing
  5407. Note:    this function and AX=3304h were intended to support a proposed
  5408.       code-page switching flag (using two of the ten reserved bytes in
  5409.       the DOS directory entry for codepage information); however, this
  5410.       function has always been a NOP in public releases of DOS and OS/2.
  5411.       See _DOS_Internals_ Chapter 2 for more information
  5412. SeeAlso: AX=3304h
  5413. --------D-213304-----------------------------
  5414. INT 21 - DOS 4.0+ - UNUSED
  5415.     AX = 3304h
  5416. Return: nothing
  5417. Note:    this function and AX=3303h were intended to support a proposed
  5418.       code-page switching flag (using two of the ten reserved bytes in
  5419.       the DOS directory entry for codepage information); however, this
  5420.       function has always been a NOP in public releases of DOS and OS/2.
  5421.       See _DOS_Internals_ Chapter 2 for more information
  5422. SeeAlso: AX=3303h
  5423. --------D-213305-----------------------------
  5424. INT 21 - DOS 4.0+ - GET BOOT DRIVE
  5425.     AX = 3305h
  5426. Return: DL = boot drive (1=A:,...)
  5427. Notes:    fully reentrant
  5428.     NEC 9800-series PCs always call the boot drive A: and assign the other
  5429.       drive letters sequentially to the other drives in the system
  5430.     this call is supported by OS/2 Warp 3.0, but not earlier versions of
  5431.       OS/2; it is also supported by Novell DOS 7
  5432. --------D-213306-----------------------------
  5433. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  5434.     AX = 3306h
  5435. Return: BL = major version
  5436.     BH = minor version
  5437.     DL = revision (bits 2-0, all others 0)
  5438.     DH = version flags
  5439.         bit 3: DOS is in ROM
  5440.         bit 4: DOS is in HMA
  5441.     AL = FFh if true DOS version < 5.0
  5442. Notes:    this function always returns the true version number, unlike AH=30h,
  5443.       whose return value may be changed with SETVER
  5444.     because of the conflict from the CBIS redirector (see next
  5445.       entry), programs should check whether BH is less than 100 (64h)
  5446.       and BL is at least 5 before accepting the returned BX as the true
  5447.       version number; however, even this is not entirely reliable when
  5448.       that redirector is loaded
  5449.     fully reentrant
  5450.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  5451.     the Windows NT DOS box returns BX=3205h (version 5.50)
  5452.     Novell DOS 7 returns IBM v6.00, which some software displays as
  5453.       IBM DOS v6.10 (because of the version mismatch in true IBM DOS
  5454.       mentioned for INT 21/AH=30h); versions through Update 15 all
  5455.       return revision code 00h
  5456.     Windows95 and Windows95 SP1 return version 7.00; Windows95 OSR2 returns
  5457.       version 7.10
  5458. BUG:    DR DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  5459.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  5460.       for invalid subfunctions
  5461. SeeAlso: AH=30h,INT 2F/AX=122Fh,INT 2F/AX=E000h"SETDRVER"
  5462. --------N-213306-----------------------------
  5463. INT 21 - CBIS network - NETWORK REDIRECTOR - ???
  5464.     AX = 3306h
  5465. Return: AX = 3306h
  5466.     BL = ??? (usually 00h)
  5467.     BH = ??? (usually 00h or FFh)
  5468. Note:    unknown function, is in conflict with DOS 5+ version call
  5469. SeeAlso: AX=3306h"DOS"
  5470. --------D-213307-----------------------------
  5471. INT 21 - Windows95 - SET/CLEAR DOS_FLAG
  5472.     AX = 3307h
  5473.     DL = subfunction
  5474.         00h clear bit 5 of "DOS_FLAG"
  5475.         01h set bit 5 of "DOS_FLAG"
  5476. Return: ???
  5477. --------v-21330F-----------------------------
  5478. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  5479.     AX = 330Fh
  5480. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  5481. SeeAlso: AX=30F1h,AX=33DAh,AX=33E0h
  5482. --------k-213341-----------------------------
  5483. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  5484.     AX = 3341h
  5485. Return: DX = 1234h if installed
  5486.         CX = resident code segment
  5487. Program: Diet Disk is a public domain transparent data file compressor by
  5488.       Barry Nance
  5489. --------v-2133DA------------------------
  5490. INT 21 - VIRUS - "CoffeeShop" - INSTALLATION CHECK
  5491.     AX = 33DAh
  5492. Return: AH = A5h if resident
  5493.         AL = virus version
  5494. SeeAlso: AX=33DB,AX=33DCh,AX=330Fh,AX=33E0h,AX=5643h"VIRUS"
  5495. --------v-2133DB------------------------
  5496. INT 21 - VIRUS - "CoffeeShop" - GENERATE RANDOM NUMBER
  5497.     AX = 33DBh
  5498. Return:    ???
  5499. SeeAlso: AX=33DAh,AX=33DCh
  5500. --------v-2133DC------------------------
  5501. INT 21 - VIRUS - "CoffeeShop" - DISPLAY "LEGALIZE CANNABIS" GRAPHIC
  5502.     AX = 33DCh
  5503. Return:    ???
  5504. SeeAlso: AX=33DAh,AX=33DBh
  5505. --------v-2133E0-----------------------------
  5506. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  5507.     AX = 33E0h
  5508. Return: AL = E0h if resident (DOS returns AL=FFh)
  5509. SeeAlso: AX=330Fh,AX=33DAh,AX=357Fh
  5510. --------D-2134-------------------------------
  5511. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  5512.     AH = 34h
  5513. Return: ES:BX -> one-byte InDOS flag
  5514. Notes:    this function executes on the DOS stack, and thus cannot be called
  5515.       while another DOS function is already executing; you should use
  5516.       this function once at the beginning of the program and store the
  5517.       returned pointer rather than calling it when requiring DOS access
  5518.     the value of InDOS is incremented whenever an INT 21 function begins
  5519.       and decremented whenever one completes
  5520.     during an INT 28 call, it is safe to call some INT 21 functions even
  5521.       though InDOS may be 01h instead of zero
  5522.     InDOS alone is not sufficient for determining when it is safe to
  5523.       enter DOS, as the critical error handling decrements InDOS and
  5524.       increments the critical error flag for the duration of the critical
  5525.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  5526.       busy.
  5527.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  5528.       then zeros it on completion
  5529.     the critical error flag is the byte immediately following InDOS in
  5530.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3.0+ and
  5531.       DR DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  5532.       is located 1AAh bytes BEFORE the critical section flag)
  5533.     for DOS 3.1+, an undocumented call exists to get the address of the
  5534.       critical error flag (see AX=5D06h)
  5535.     this function was undocumented prior to the release of DOS 5.0.
  5536. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  5537. --------D-2135-------------------------------
  5538. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  5539.     AH = 35h
  5540.     AL = interrupt number
  5541. Return: ES:BX -> current interrupt handler
  5542. Note:    under DR DOS 5.0+, this function does not use any of the DOS-internal
  5543.       stacks and may thus be called at any time
  5544. SeeAlso: AH=25h,AX=2503h
  5545. --------E-213501-----------------------------
  5546. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  5547.     AX = 3501h
  5548. Return: CF clear if successful
  5549.         BX = new selector
  5550.     CF set on error (no more selectors available)
  5551. Note:    the new selector will be an expand-up read/write data selector with
  5552.       undefined base and limit
  5553. SeeAlso: AX=3502h,INT 31/AX=0000h
  5554. --------E-213502-----------------------------
  5555. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  5556.     AX = 3502h
  5557.     BX = selector
  5558. Return: CF clear if successful
  5559.     CF set on error (invalid selector)
  5560. Note:    only selectors allocated via AX=3501h should be deallocated
  5561. SeeAlso: AX=3501h,INT 31/AX=0001h
  5562. --------E-213503-----------------------------
  5563. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  5564.     AX = 3503h
  5565.     BX = selector
  5566.     ECX = base address
  5567. Return: CF clear if successful
  5568.     CF set on error (invalid selector)
  5569. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  5570. --------E-213504-----------------------------
  5571. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  5572.     AX = 3504h
  5573.     BX = selector
  5574. Return: CF clear if successful
  5575.         ECX = absolute base address of selector
  5576.     CF set on error (invalid selector)
  5577. SeeAlso: AX=3503h,INT 31/AX=0006h
  5578. --------E-213505-----------------------------
  5579. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  5580.     AX = 3505h
  5581.     BX = selector
  5582.     ECX = desired limit
  5583. Return: CF clear if successful
  5584.         ECX = actual limit set
  5585.     CF set on error (no more selectors available)
  5586. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  5587.       limit is greater than 1MB
  5588. SeeAlso: AX=3503h,INT 31/AX=0008h
  5589. --------E-21350A-----------------------------
  5590. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  5591.     AX = 350Ah
  5592.     EBX = absolute physical address
  5593.     ECX = size in bytes of area to map
  5594. Return: CF clear if successful
  5595.     CF set on error (insufficient memory or service refused by DPMI host)
  5596. Notes:    should not make repeated calls for the same physical address
  5597.     there is no provision for unmapping memory
  5598. --------E-21350B-----------------------------
  5599. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  5600.     AX = 350Bh
  5601.     DS = default selector for DS
  5602. Return: CF clear
  5603.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  5604. SeeAlso: AX=350Ch
  5605. --------E-21350C-----------------------------
  5606. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  5607.     AX = 350Ch
  5608.     ECX = size of block in bytes
  5609.     DS = default DS
  5610. Return: CF clear if successful
  5611.         EAX = near pointer to new block
  5612.         EDX = new lowest legal value for stack
  5613.     CF set on error (requested size not multiple of 4K)
  5614. SeeAlso: AX=350Bh,AX=350Dh
  5615. --------E-21350D-----------------------------
  5616. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  5617.     AX = 350Dh
  5618.     EBX = current ESP value
  5619.     ECX = size of block in bytes
  5620.     DS = default DS
  5621. Return: CF clear if successful
  5622.         EBX = new value for ESP
  5623.         EDX = suggested new limit for SS
  5624.     CF set on error
  5625. Note:    this function should only be called once during initialization
  5626. SeeAlso: AX=350Bh,AX=350Ch
  5627. --------v-21357F-----------------------------
  5628. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  5629.     AX = 357Fh
  5630. Return: DX = FFFFh if installed
  5631. SeeAlso: AX=33E0h,AX=3DFFh
  5632. --------D-2136-------------------------------
  5633. INT 21 - DOS 2+ - GET FREE DISK SPACE
  5634.     AH = 36h
  5635.     DL = drive number (00h = default, 01h = A:, etc)
  5636. Return: AX = FFFFh if invalid drive
  5637.     else
  5638.         AX = sectors per cluster
  5639.         BX = number of free clusters
  5640.         CX = bytes per sector
  5641.         DX = total clusters on drive
  5642. Notes:    free space on drive in bytes is AX * BX * CX
  5643.     total space on drive in bytes is AX * CX * DX
  5644.     "lost clusters" are considered to be in use
  5645.     according to Dave Williams' MS-DOS reference, the value in DX is
  5646.       incorrect for non-default drives after ASSIGN is run
  5647.     this function does not return proper results on CD-ROMs;
  5648.       use AX=4402h"CD-ROM" instead
  5649.     (FAT32 drive) the reported total and free space are limited to 2G-32K
  5650.       should they exceed that value
  5651. SeeAlso: AH=1Bh,AH=1Ch,AX=4402h"CD-ROM",AX=7303h
  5652. --------D-213700-----------------------------
  5653. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  5654.     AX = 3700h
  5655. Return: AL = status
  5656.         00h successful
  5657.         DL = current switch character
  5658.         FFh unsupported subfunction
  5659. Desc:    Determine the character which is used to introduce command switches.
  5660.       This setting is ignored by MS-DOS commands in version 4.0 and higher,
  5661.       but is honored by many third-party programs and by Novell DOS 7
  5662.       external commands
  5663. BUG:    Novell DOS 7's COMMAND.COM (prior to Update 15) fails to honor the
  5664.       SwitChar setting for internal commands even though COMMAND.COM
  5665.       honors it in its own command tail (i.e. COMMAND /?); even in Update
  5666.       15, internal commands fail to honor SwitChar for the /? help option
  5667. Notes:    documented in some OEM versions of some releases of DOS
  5668.     supported by OS/2 compatibility box
  5669.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR DOS 3.41-6.0
  5670.     Novell DOS 7 COMMAND.COM indicates switch characters other than '/'
  5671.       by changing the first backslash (and only the first one) in the
  5672.       path it prints for PROMPT $p with a forward slash
  5673. SeeAlso: AX=3701h
  5674. --------D-213701-----------------------------
  5675. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  5676.     AX = 3701h
  5677.     DL = new switch character
  5678. Return: AL = status
  5679.         00h successful
  5680.         FFh unsupported subfunction
  5681. Notes:    documented in some OEM versions of some releases of DOS; DOS 2.x had
  5682.       a SWITCHAR=c setting in CONFIG.SYS
  5683.     supported by OS/2 compatibility box and Novell DOS 7
  5684.     ignored by MS-DOS 5+ and DR DOS 3.41-6.0; DR DOS 6.0 and Novell DOS 7
  5685.       leave AX unchanged
  5686. SeeAlso: AX=3700h
  5687. --------D-2137-------------------------------
  5688. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  5689.     AH = 37h
  5690.     AL = subfunction
  5691.         02h get availdev flag
  5692.         Return: DL = 00h \DEV\ must precede character device names
  5693.                = nonzero \DEV\ is optional
  5694.         03h set availdev flag
  5695.         DL = new state
  5696.             00h        \DEV\ is mandatory
  5697.             nonzero    \DEV\ is optional
  5698. Return: AL = status
  5699.         00h successful
  5700.         FFh unsupported subfunction
  5701. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  5702.       names without generating an error even if the directory \DEV does
  5703.       not actually exist (other paths generate an error if they do not
  5704.       exist); DOS 2.x has an AVAILDEV= option in CONFIG.SYS to make \DEV
  5705.       mandatory
  5706.     although MS-DOS 3.3+, DR DOS 3.41+, and Novell DOS 7 accept these
  5707.       calls, they have no effect, and AL=02h always returns DL=FFh (except
  5708.       for Novell DOS 7, which leaves AX unchanged for both subfunctions)
  5709. --------k-2137A0BX6A6D-----------------------
  5710. INT 21 - XPACK v1.52+ - TSR INSTALLATION CHECK
  5711.     AX = 37A0h
  5712.     BX = 6A6Dh ('jm')
  5713. Return: AL = FFh if not present as TSR (default return value from DOS)
  5714.     AX = 0000h if installed as a TSR
  5715.         CX = 6A6Dh ('jm')
  5716.         DX = version ID (0152h)
  5717. Program: XPACK is a transparent file compressor/decompressor by JauMing Tseng
  5718. SeeAlso: AX=37A1h/BX=6A6Dh,AX=37A3h/BX=6A6Dh
  5719. --------k-2137A1BX6A6D-----------------------
  5720. INT 21 - XPACK v1.52+ - UNINSTALL
  5721.     AX = 37A1h
  5722.     BX = 6A6Dh ('jm')
  5723. Return: AX = status
  5724.         0000h successful
  5725.         FFFFh failed
  5726. Program: XPACK is a transparent file compressor/decompressor by JauMing Tseng
  5727. SeeAlso: AX=37A0h/BX=6A6Dh
  5728. --------k-2137A2BX6A6D-----------------------
  5729. INT 21 - XPACK v1.52+ - GET TSR STATUS
  5730.     AX = 37A2h
  5731.     BX = 6A6Dh ('jm')
  5732. Return: AX = 0000h (successful)
  5733.     DL = status (01h active, 00h disabled)
  5734. SeeAlso: AX=37A3h/BX=6A6Dh
  5735. --------k-2137A3BX6A6D-----------------------
  5736. INT 21 - XPACK v1.52+ - SET TSR STATUS
  5737.     AX = 37A3h
  5738.     BX = 6A6Dh ('jm')
  5739.     DL = status (01h active, 00h disabled)
  5740. Return: AX = 0000h (successful)
  5741. SeeAlso: AX=37A0h/BX=6A6Dh,AX=37A2h/BX=6A6Dh
  5742. ----------2137A6BX6A6D-----------------------
  5743. INT 21 - XPACK v1.65 - GET TEMPORARY DIRECTORY NAME
  5744.     AX = 37A6h
  5745.     BX = 6A6Dh ('jm')
  5746. Return: AX = 0000h
  5747.     DS:DX -> name of temporary directory
  5748. Program: XPACK is a transparent file compressor/decompressor by JauMing Tseng
  5749. SeeAlso: AX=37A0h/BX=6A6Dh,AX=37A7h/BX=6A6Dh
  5750. ----------2137A7BX6A6D-----------------------
  5751. INT 21 - XPACK v1.65 - SET TEMPORARY DIRECTORY NAME
  5752.     AX = 37A7h
  5753.     BX = 6A6Dh ('jm')
  5754.     DS:DX -> ASCIZ name of temporary directory (max 64 chars)
  5755. Return: AX = 0000h
  5756. Note:    the specified directory name must include a drive letter and end with
  5757.       a backslash (e.g. 'c:\dos\',0)
  5758. SeeAlso: AX=37A0h/BX=6A6Dh,AX=37A6h/BX=6A6Dh
  5759. --------k-2137D0BX899D-----------------------
  5760. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  5761.     AX = 37D0h
  5762.     BX = 899Dh ('DI' + 'ET')
  5763. Return: AL = FFh if not present as TSR (default return value from DOS)
  5764.     AX = 0000h if installed as a TSR
  5765.         CX = 899Dh
  5766.         DX = version ID
  5767. Program: DIET is a transparent file compressor/decompressor by Teddy Matsumoto
  5768. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  5769. --------k-2137D1BX899D-----------------------
  5770. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  5771.     AX = 37D1h
  5772.     BX = 899Dh ('DI' + 'ET')
  5773. Return: AX = 0000h
  5774.     CX = code segment of TSR part of DIET.EXE
  5775.     DX = memory block segment of TSR DIET.EXE
  5776.         (0000h if installed as device driver)
  5777. SeeAlso: AX=37D0h,AX=37DFh
  5778. --------k-2137D2BX899D-----------------------
  5779. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  5780.     AX = 37D2h
  5781.     BX = 899Dh ('DI' + 'ET')
  5782. Return: AX = 0000h
  5783.     DL = control flag (00h active, else disabled)
  5784.     DH = skip flag (nonzero while TSR active)
  5785. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  5786. --------k-2137D3BX899D-----------------------
  5787. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  5788.     AX = 37D3h
  5789.     BX = 899Dh ('DI' + 'ET')
  5790.     DL = control flag (00h active, else disabled)
  5791.     DH = skip flag (00h)
  5792. Return: AX = 0000h
  5793. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  5794. --------k-2137D4BX899D-----------------------
  5795. INT 21 - DIET v1.43e - GET TSR OPTIONS
  5796.     AX = 37D4h
  5797.     BX = 899Dh ('DI' + 'ET')
  5798. Return: AX = 0000h
  5799.     DX = TSR options (see #01396)
  5800. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  5801.  
  5802. Bitfields for DIET TSR options:
  5803. Bit(s)    Description    (Table 01396)
  5804.  0    automated compression of DIETed file
  5805.  1    automated compression of newly-created file
  5806.  2    suppress DIET message
  5807.  3    display original file size
  5808.  4-15    reserved (0)
  5809. --------k-2137D5BX899D-----------------------
  5810. INT 21 - DIET v1.43e - SET TSR OPTIONS
  5811.     AX = 37D5h
  5812.     BX = 899Dh ('DI' + 'ET')
  5813.     DX = TSR options (see #01396)
  5814. Return: AX = 0000h
  5815. Program: DIET is a transparent file compressor/decompressor by Teddy Matsumoto
  5816. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  5817. --------k-2137D6BX899D-----------------------
  5818. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  5819.     AX = 37D6h
  5820.     BX = 899Dh ('DI' + 'ET')
  5821. Return: AX = 0000h
  5822.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  5823. SeeAlso: AX=37D0h,AX=37D7h
  5824. --------k-2137D7BX899D-----------------------
  5825. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  5826.     AX = 37D7h
  5827.     BX = 899Dh ('DI' + 'ET')
  5828.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  5829.         0000h:0000h for current directory
  5830. Return: AX = 0000h
  5831. Note:    the specified directory name must include a drive letter and end with
  5832.       a backslash
  5833. SeeAlso: AX=37D0h,AX=37D6h
  5834. --------k-2137DCBX899D-----------------------
  5835. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  5836.     AX = 37DCh
  5837.     BX = 899Dh ('DI' + 'ET')
  5838.     DS:DX -> external procedure (see #01397)
  5839. Return: AX = 0000h
  5840. Note:    the resident code will call the specified external procedure at the
  5841.       beginning of decompression and when compression is exited on failure
  5842. SeeAlso: AX=37DDh
  5843.  
  5844. (Table 01397)
  5845. Values DIET external procedure is called with:
  5846.     STACK:    WORD    class
  5847.             FFFDh creation failed for unknown reasons
  5848.             FFFEh creation failed due to lack of space
  5849.             FFFFh file creation error
  5850.             else file handle of DIETed file to be decompressed
  5851.         DWORD    -> compressed filename
  5852.         DWORD    -> decompressed or temporary filename
  5853. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  5854. --------k-2137DDBX899D-----------------------
  5855. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  5856.     AX = 37DDh
  5857.     BX = 899Dh ('DI' + 'ET')
  5858. Program: DIET is a transparent file compressor/decompressor by Teddy Matsumoto
  5859. Note:    unlinks the external procedure specified by AX=37DCh
  5860. SeeAlso: AX=37DCh
  5861. --------k-2137DEBX899D-----------------------
  5862. INT 21 - DIET v1.43e - READ EMS STATUS
  5863.     AX = 37DEh
  5864.     BX = 899Dh ('DI' + 'ET')
  5865. Return: AX = 0000h
  5866.     CX = EMS status
  5867.         0000h not used
  5868.         0001h used as work area
  5869.         0002h used for code and as work area
  5870.     DX = EMM handle when EMS is in use
  5871. --------k-2137DFBX899D-----------------------
  5872. INT 21 - DIET v1.43e - UNINSTALL TSR
  5873.     AX = 37DFh
  5874.     BX = 899Dh ('DI' + 'ET')
  5875. Return: AX = status
  5876.         0000h successful
  5877.         00FFh failed
  5878. Program: DIET is a transparent file compressor/decompressor by Teddy Matsumoto
  5879. SeeAlso: AX=37D0h
  5880. Index:    uninstall;DIET
  5881. --------D-2138-------------------------------
  5882. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  5883.     AH = 38h
  5884. --DOS 2.x--
  5885.     AL = 00h get current-country info
  5886.     DS:DX -> buffer for returned info (see #01398,#01399)
  5887. Return: CF set on error
  5888.         AX = error code (02h)
  5889.     CF clear if successful
  5890.         AX = country code (MS-DOS 2.11 only)
  5891.         buffer at DS:DX filled
  5892. --DOS 3.0+--
  5893.     AL = 00h for current country
  5894.     AL = 01h thru 0FEh for specific country with code <255 (see #01400)
  5895.     AL = 0FFh for specific country with code >= 255
  5896.        BX = 16-bit country code (see #01400)
  5897.     DS:DX -> buffer for returned info (see #01399)
  5898. Return: CF set on error
  5899.         AX = error code (02h)
  5900.     CF clear if successful
  5901.         AX = country code (Novell NWDOS v7.0)
  5902.         BX = country code
  5903.         DS:DX buffer filled
  5904. Note:    this function is not supported by the Borland DPMI host, but no error
  5905.       is returned; as a workaround, one should allocate a buffer in
  5906.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  5907.       INT 31/AX=0300h
  5908. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  5909.  
  5910. Format of DOS 2.00-2.10 country info:
  5911. Offset    Size    Description    (Table 01398)
  5912.  00h    WORD    date format  0 = USA    mm dd yy
  5913.                  1 = Europe dd mm yy
  5914.                  2 = Japan    yy mm dd
  5915.  02h    BYTE    currency symbol
  5916.  03h    BYTE    00h
  5917.  04h    BYTE    thousands separator char
  5918.  05h    BYTE    00h
  5919.  06h    BYTE    decimal separator char
  5920.  07h    BYTE    00h
  5921.  08h 24 BYTEs    reserved
  5922.  
  5923. Format of DOS 2.11+ country info:
  5924. Offset    Size    Description    (Table 01399)
  5925.  00h    WORD    date format (see #01398)
  5926.  02h  5 BYTEs    ASCIZ currency symbol string
  5927.  07h  2 BYTEs    ASCIZ thousands separator
  5928.  09h  2 BYTEs    ASCIZ decimal separator
  5929.  0Bh  2 BYTEs    ASCIZ date separator
  5930.  0Dh  2 BYTEs    ASCIZ time separator
  5931.  0Fh    BYTE    currency format
  5932.         bit 2 = set if currency symbol replaces decimal point
  5933.         bit 1 = number of spaces between value and currency symbol
  5934.         bit 0 = 0 if currency symbol precedes value
  5935.             1 if currency symbol follows value
  5936.  10h    BYTE    number of digits after decimal in currency
  5937.  11h    BYTE    time format
  5938.         bit 0 = 0 if 12-hour clock
  5939.             1 if 24-hour clock
  5940.  12h    DWORD    address of case map routine
  5941.         (FAR CALL, AL = character to map to upper case [>= 80h])
  5942.  16h  2 BYTEs    ASCIZ data-list separator
  5943.  18h 10 BYTEs    reserved
  5944.  
  5945. (Table 01400)
  5946. Values for country code:
  5947.  001h (1)    United States
  5948.  002h (2)    Canadian-French
  5949.  003h (3)    Latin America
  5950.  004h (4)    Canada (English)
  5951.  007h (7)    Russia
  5952.  014h (20)    Egypt
  5953.  01Bh (27)    South Africa
  5954.  01Eh (30)    Greece
  5955.  01Fh (31)    Netherlands
  5956.  020h (32)    Belgium
  5957.  021h (33)    France
  5958.  022h (34)    Spain
  5959.  023h (35)    Bulgaria???
  5960.  024h (36)    Hungary (not supported by DR DOS 5.0)
  5961.  026h (38)    Yugoslavia (not supported by DR DOS 5.0) -- obsolete
  5962.  027h (39)    Italy / San Marino / Vatican City
  5963.  028h (40)    Romania
  5964.  029h (41)    Switzerland / Liechtenstein
  5965.  02Ah (42)    Czechoslovakia / Tjekia / Slovakia (not supported by DR DOS 5.0)
  5966.  02Bh (43)    Austria (DR DOS 5.0)
  5967.  02Ch (44)    United Kingdom
  5968.  02Dh (45)    Denmark
  5969.  02Eh (46)    Sweden
  5970.  02Fh (47)    Norway
  5971.  030h (48)    Poland (not supported by DR DOS 5.0)
  5972.  031h (49)    Germany
  5973.  033h (51)    Peru
  5974.  034h (52)    Mexico
  5975.  035h (53)    Cuba
  5976.  036h (54)    Argentina
  5977.  037h (55)    Brazil (not supported by DR DOS 5.0)
  5978.  038h (56)    Chile
  5979.  039h (57)    Columbia
  5980.  03Ah (58)    Venezuela
  5981.  03Ch (60)    Malaysia
  5982.  03Dh (61)    International English / Australia
  5983.  03Eh (62)    Indonesia / East Timor
  5984.  03Fh (63)    Philippines
  5985.  040h (64)    New Zealand
  5986.  041h (65)    Singapore
  5987.  042h (66)    Taiwan???
  5988.  051h (81)    Japan (DR DOS 5.0, MS-DOS 5.0+)
  5989.  052h (82)    South Korea (DR DOS 5.0)
  5990.  054h (84)    Vietnam
  5991.  056h (86)    China (MS-DOS 5.0+)
  5992.  058h (88)    Taiwan (MS-DOS 5.0+)
  5993.  05Ah (90)    Turkey (MS-DOS 5.0+)
  5994.  05Bh (91)    India
  5995.  05Ch (92)    Pakistan
  5996.  05Dh (93)    Afghanistan
  5997.  05Eh (94)    Sri Lanka
  5998.  062h (98)    Iran
  5999.  063h (99)    Asia (English)
  6000.  070h (112)    Belarus
  6001.  0C8h (200)    Thailand
  6002.  0D4h (212)    Morocco
  6003.  0D5h (213)    Algeria
  6004.  0D8h (216)    Tunisia
  6005.  0DAh (218)    Libya
  6006.  0DCh (220)    Gambia
  6007.  0DDh (221)    Senegal
  6008.  0DEh (222)    Maruitania
  6009.  0DFh (223)    Mali
  6010.  0E0h (224)    African Guinea
  6011.  0E1h (225)    Ivory Coast
  6012.  0E2h (226)    Burkina Faso
  6013.  0E3h (227)    Niger
  6014.  0E4h (228)    Togo
  6015.  0E5h (229)    Benin
  6016.  0E6h (230)    Mauritius
  6017.  0E7h (231)    Liberia
  6018.  0E8h (232)    Sierra Leone
  6019.  0E9h (233)    Ghana
  6020.  0EAh (234)    Nigeria
  6021.  0EBh (235)    Chad
  6022.  0ECh (236)    Centra African Republic
  6023.  0EDh (237)    Cameroon
  6024.  0EEh (238)    Cape Verde Islands
  6025.  0EFh (239)    Sao Tome and Principe
  6026.  0F0h (240)    Equatorial Guinea
  6027.  0F1h (241)    Gabon
  6028.  0F2h (242)    Congo
  6029.  0F3h (243)    Zaire
  6030.  0F4h (244)    Angola
  6031.  0F5h (245)    Guinea-Bissau
  6032.  0F6h (246)    Diego Garcia
  6033.  0F7h (247)    Ascension Isle
  6034.  0F8h (248)    Seychelles
  6035.  0F9h (249)    Sudan
  6036.  0FAh (250)    Rwhanda
  6037.  0FBh (251)    Ethiopia
  6038.  0FCh (252)    Somalia
  6039.  0FDh (253)    Djibouti
  6040.  0FEh (254)    Kenya
  6041.  0FFh (255)    Tanzania
  6042.  100h (256)    Uganda
  6043.  101h (257)    Burundi
  6044.  103h (259)    Mozambique
  6045.  104h (260)    Zambia
  6046.  105h (261)    Madagascar
  6047.  106h (262)    Reunion Island
  6048.  107h (263)    Zimbabwe
  6049.  108h (264)    Namibia
  6050.  109h (265)    Malawi
  6051.  10Ah (266)    Lesotho
  6052.  10Bh (267)    Botswana
  6053.  10Ch (268)    Swaziland
  6054.  10Dh (269)    Comoros
  6055.  10Eh (270)    Mayotte
  6056.  122h (290)    St. Helena
  6057.  129h (297)    Aruba
  6058.  12Ah (298)    Faroe Islands
  6059.  12Bh (299)    Greenland
  6060.  15Eh (350)    Gibraltar
  6061.  15Fh (351)    Portugal
  6062.  160h (352)    Luxembourg
  6063.  161h (353)    Ireland
  6064.  162h (354)    Iceland
  6065.  163h (355)    Albania
  6066.  164h (356)    Malta
  6067.  165h (357)    Cyprus
  6068.  166h (358)    Finland
  6069.  167h (359)    Bulgaria
  6070.  172h (370)    Lithuania
  6071.  173h (371)    Latvia
  6072.  174h (372)    Estonia
  6073.  175h (373)    Moldova
  6074.  17Dh (381)    Serbia / Montenegro
  6075.  180h (384)    Croatia???
  6076.  181h (385)    Croatia
  6077.  182h (386)    Slovenia
  6078.  183h (387)    Bosnia-Herzegovina (Latin)
  6079.  184h (388)    Bosnia-Herzegovina (Cyrillic)
  6080.  185h (389)    FYR Macedonia
  6081.  1A5h (421)    Czech Republic
  6082.  1A6h (422)    Slovakia
  6083.  1F4h (500)    Falkland Islands
  6084.  1F5h (501)    Belize
  6085.  1F6h (502)    Guatemala
  6086.  1F7h (503)    El Salvador
  6087.  1F8h (504)    Honduras
  6088.  1F9h (505)    Nicraragua
  6089.  1FAh (506)    Costa Rica
  6090.  1FBh (507)    Panama
  6091.  1FCh (508)    St. Pierre and Miquelon
  6092.  1FDh (509)    Haiti
  6093.  24Eh (590)    Guadeloupe
  6094.  24Fh (591)    Bolivia
  6095.  250h (592)    Guyana
  6096.  251h (593)    Ecuador
  6097.  252h (594)    rench Guiana
  6098.  253h (595)    Paraguay
  6099.  254h (596)    Martinique / French Antilles
  6100.  255h (597)    Suriname
  6101.  256h (598)    Uruguay
  6102.  257h (599)    Netherland Antilles
  6103.  29Eh (670)    Saipan / N. Mariana Island
  6104.  29Fh (671)    Guam
  6105.  2A0h (672)    Norfolk Island (Australia) / Christmas Island/Cocos Islands / Antartica
  6106.  2A1h (673)    Brunei Darussalam
  6107.  2A2h (674)    Nauru
  6108.  2A3h (675)    Papua New Guinea
  6109.  2A4h (676)    Tonga Islands
  6110.  2A5h (677)    Solomon Islands
  6111.  2A6h (678)    Vanuatu
  6112.  2A7h (679)    Fiji
  6113.  2A8h (680)    Palau
  6114.  2A9h (681)    Wallis & Futuna
  6115.  2AAh (682)    Cook Islands
  6116.  2ABh (683)    Niue
  6117.  2ACh (684)    American Samoa
  6118.  2ADh (685)    Western Samoa
  6119.  2AEh (686)    Kiribati
  6120.  2AFh (687)    New Caledonia
  6121.  2B0h (688)    Tuvalu
  6122.  2B1h (689)    French Polynesia
  6123.  2B2h (690)    Tokealu
  6124.  2B3h (691)    Micronesia
  6125.  2B4h (692)    Marshall Islands
  6126.  2C7h (711)    ??? (currency = EA$)
  6127.  311h (785)    Arabic (Middle East/Saudi Arabia/etc.)
  6128.  324h (804)    Ukraine
  6129.  329h (809)    Antigua and Barbuda / Anguilla / Bahamas / Barbados / Bermuda
  6130.         British Virgin Islands / Cayman Islands / Dominica
  6131.         Dominican Republic / Grenada / Jamaica / Montserra
  6132.         St. Kitts and Nevis / St. Lucia / St. Vincent and Grenadines
  6133.         Trinidad and Tobago / Turks and Caicos
  6134.  352h (850)    North Korea
  6135.  354h (852)    Hong Kong
  6136.  355h (853)    Macao
  6137.  357h (855)    Cambodia
  6138.  358h (856)    Laos
  6139.  370h (880)    Bangladesh
  6140.  376h (886)    Taiwan (DOS 6.22+)
  6141.  3C0h (960)    Maldives
  6142.  3C1h (961)    Lebanon
  6143.  3C2h (962)    Jordan
  6144.  3C3h (963)    Syrian Arab Republic
  6145.  3C4h (964)    Ireq
  6146.  3C5h (965)    Kuwait
  6147.  3C6h (966)    Saudi Arabia
  6148.  3C7h (967)    Yemen
  6149.  3C8h (968)    Oman
  6150.  3CBh (971)    United Arab Emirates
  6151.  3CCh (972)    Israel (Hebrew) (DR DOS 5.0,MS-DOS 5.0+)
  6152.  3CDh (973)    Bahrain
  6153.  3CEh (974)    Qatar
  6154.  3CFh (975)    Bhutan
  6155.  3D0h (976)    Mongolia
  6156.  3D1h (977)    Nepal
  6157.  3E3h (995)    Myanmar (Burma)
  6158. Note:    not all country codes are supported by all versions of DOS
  6159. --------D-2138--DXFFFF-----------------------
  6160. INT 21 - DOS 3.0+ - SET COUNTRY CODE
  6161.     AH = 38h
  6162.     DX = FFFFh
  6163.     AL = 01h thru FEh for specific country with code <255
  6164.     AL = FFh for specific country with code >= 255
  6165.        BX = 16-bit country code (see #01400)
  6166. Return: CF set on error
  6167.         AX = error code (see #01680 at AH=59h/BX=0000h)
  6168.     CF clear if successful
  6169. Note:    not supported by OS/2
  6170. SeeAlso: INT 2F/AX=1403h
  6171. --------D-2139-------------------------------
  6172. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  6173.     AH = 39h
  6174.     DS:DX -> ASCIZ pathname
  6175. Return: CF clear if successful
  6176.         AX destroyed
  6177.     CF set on error
  6178.         AX = error code (03h,05h) (see #01680 at AH=59h/BX=0000h)
  6179. Notes:    all directories in the given path except the last must exist
  6180.     fails if the parent directory is the root and is full
  6181.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  6182.       it is not possible to make that directory the current directory
  6183.       because the path would exceed 64 characters
  6184.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6185. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AX=7139h,AH=E2h/SF=0Ah,AX=43FFh/BP=5053h
  6186. SeeAlso: INT 2F/AX=1103h,INT 60/DI=0511h
  6187. --------D-213A-------------------------------
  6188. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  6189.     AH = 3Ah
  6190.     DS:DX -> ASCIZ pathname of directory to be removed
  6191. Return: CF clear if successful
  6192.         AX destroyed
  6193.     CF set on error
  6194.         AX = error code (03h,05h,06h,10h) (see #01680 at AH=59h/BX=0000h)
  6195. Notes:    directory must be empty (contain only '.' and '..' entries)
  6196.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6197. SeeAlso: AH=39h,AH=3Bh,AX=713Ah,AH=E2h/SF=0Bh,INT 2F/AX=1101h,INT 60/DI=0512h
  6198. --------D-213B-------------------------------
  6199. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  6200.     AH = 3Bh
  6201.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  6202. Return: CF clear if successful
  6203.         AX destroyed
  6204.     CF set on error
  6205.         AX = error code (03h) (see #01680 at AH=59h/BX=0000h)
  6206. Notes:    if new directory name includes a drive letter, the default drive is
  6207.       not changed, only the current directory on that drive
  6208.     changing the current directory also changes the directory in which
  6209.       FCB file calls operate
  6210.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6211. SeeAlso: AH=47h,AX=713Bh,INT 2F/AX=1105h
  6212. --------D-213C-------------------------------
  6213. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  6214.     AH = 3Ch
  6215.     CX = file attributes (see #01401)
  6216.     DS:DX -> ASCIZ filename
  6217. Return: CF clear if successful
  6218.         AX = file handle
  6219.     CF set on error
  6220.         AX = error code (03h,04h,05h) (see #01680 at AH=59h/BX=0000h)
  6221. Notes:    if a file with the given name exists, it is truncated to zero length
  6222.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6223.     DR DOS checks the system password or explicitly supplied password at
  6224.       the end of the filename against the reserved field in the directory
  6225.       entry before allowing access
  6226. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  6227.  
  6228. Bitfields for file attributes:
  6229. Bit(s)    Description    (Table 01401)
  6230.  0    read-only
  6231.  1    hidden
  6232.  2    system
  6233.  3    volume label (ignored)
  6234.  4    reserved, must be zero (directory)
  6235.  5    archive bit
  6236.  7    if set, file is shareable under Novell NetWare
  6237. --------D-213D-------------------------------
  6238. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  6239.     AH = 3Dh
  6240.     AL = access and sharing modes (see #01402)
  6241.     DS:DX -> ASCIZ filename
  6242.     CL = attribute mask of files to look for (server call only)
  6243. Return: CF clear if successful
  6244.         AX = file handle
  6245.     CF set on error
  6246.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see #01680 at AH=59h)
  6247. Notes:    file pointer is set to start of file
  6248.     if SHARE or a network is loaded, the file open may fail if the file
  6249.       is already open, depending on the combination of sharing modes
  6250.       (see #01403,#01404)
  6251.     file handles which are inherited from a parent also inherit sharing
  6252.       and access restrictions
  6253.     files may be opened even if given the hidden or system attributes
  6254.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6255.     DR DOS checks the system password or explicitly supplied password at
  6256.       the end of the filename (following a semicolon) against the reserved
  6257.       field in the directory entry before allowing access
  6258.     sharing modes are only effective on local drives if SHARE is loaded
  6259. BUG:    Novell DOS 7 SHARE v1.00 would refuse file access in the cases in
  6260.       #01403 marked with [1] (read-only open of a read-only file
  6261.       which had previously been opened in compatibility mode); this was
  6262.       fixed in SHARE v1.01 of 09/29/94
  6263. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  6264.  
  6265. Bitfields for access and sharing modes:
  6266. Bit(s)    Description    (Table 01402)
  6267.  2-0    access mode
  6268.     000 read only
  6269.     001 write only
  6270.     010 read/write
  6271.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  6272.         case-sensitive filenames
  6273.  3    reserved (0)
  6274.  6-4    sharing mode (DOS 3.0+) (see #01403)
  6275.     000 compatibility mode
  6276.     001 "DENYALL" prohibit both read and write access by others
  6277.     010 "DENYWRITE" prohibit write access by others
  6278.     011 "DENYREAD" prohibit read access by others
  6279.     100 "DENYNONE" allow full access by others
  6280.     111 network FCB (only available during server call)
  6281.  7    inheritance
  6282.     if set, file is private to current process and will not be inherited
  6283.       by child processes
  6284. SeeAlso: #01782,#01403
  6285.  
  6286. (Table 01403)
  6287. Values of DOS 2-6.22 file sharing behavior:
  6288.       |    Second and subsequent Opens
  6289.  First      |Compat  Deny      Deny     Deny    Deny
  6290.  Open      |       All      Write     Read    None
  6291.       |R W RW R W RW R W RW R W RW R W RW
  6292.  - - - - -| - - - - - - - - - - - - - - - - -
  6293.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  6294.     W |Y Y Y  N N N     N N N    N N N  N N N
  6295.     RW|Y Y Y  N N N     N N N    N N N  N N N
  6296.  - - - - -|
  6297.  Deny    R |C C C  N N N     N N N    N N N  N N N
  6298.  All    W |C C C  N N N     N N N    N N N  N N N
  6299.     RW|C C C  N N N     N N N    N N N  N N N
  6300.  - - - - -|
  6301.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  6302.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  6303.     RW|C C C  N N N     N N N    N N N  Y N N
  6304.  - - - - -|
  6305.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  6306.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  6307.     RW|C C C  N N N     N N N    N N N  N Y N
  6308.  - - - - -|
  6309.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  6310.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  6311.     RW|C C C  N N N     N N N    N N N  Y Y Y
  6312. Legend: Y = open succeeds, N = open fails with error code 05h
  6313.     C = open fails, INT 24 generated
  6314.     1 = open succeeds if file read-only, else fails with error code
  6315.     2 = open succeeds if file read-only, else fails with INT 24
  6316. SeeAlso: #01636,#01404
  6317.  
  6318. (Table 01404)
  6319. Values for DOS 7.x file sharing behavior:
  6320.       |    Second and subsequent Opens
  6321.  First      |Compat    Deny      Deny     Deny       Deny
  6322.  Open      |         All       Write     Read       None
  6323.       |R W RW A  R W RW A  R W RW A     R W RW A  R W RW A
  6324.  - - - - -| - - - - - - - - - - - - - - - - - - - - - - - -
  6325.  Compat R |Y Y Y Y   N N N N   Y N N Y     N N N Y   Y N N Y
  6326.     W |Y Y Y C   N N N N   N N N N     N N N Y   Y N N Y
  6327.     RW|Y Y Y C   N N N N   N N N N     N N N Y   Y N N Y
  6328.     NA|Y C C Y   N N N N   Y N N Y     N N N Y   Y N N Y
  6329.  - - - - -|
  6330.  Deny    R |C C C C   N N N N   N N N N     N N N N   N N N N
  6331.  All    W |C C C C   N N N N   N N N N     N N N N   N N N N
  6332.     RW|C C C C   N N N N   N N N N     N N N N   N N N N
  6333.     NA|C C C C   N N N N   N N N N     N N N N   N N N N
  6334.  - - - - -|
  6335.  Deny    R |Y C C Y   N N N N   Y N N Y     N N N Y   Y N N Y
  6336.  Write    W |C C C C   N N N N   N N N N     Y N N Y   Y N N Y
  6337.     RW|C C C C   N N N N   N N N N     N N N Y   Y N N Y
  6338.     NA|Y C C Y   N N N N   Y N N Y     N N N Y   Y N N Y
  6339.  - - - - -|
  6340.  Deny    R |C C C C   N N N N   N Y N N     N N N N   N Y N N
  6341.  Read    W |C C C C   N N N N   N N N N     N Y N N   N Y N N
  6342.     RW|C C C C   N N N N   N N N N     N N N N   N Y N N
  6343.     NA|Y Y Y Y   N N N N   Y Y Y Y     N N N Y   Y Y Y Y
  6344.  - - - - -|
  6345.  Deny    R |Y Y Y Y   N N N N   Y Y Y Y     N N N Y   Y Y Y Y
  6346.  None    W |C C C C   N N N N   N N N N     Y Y Y Y   Y Y Y Y
  6347.     RW|C C C C   N N N N   N N N N     N N N Y   Y Y Y Y
  6348.     NA|Y Y Y Y   N N N N   Y Y Y Y     N N N Y   Y Y Y Y
  6349. Legend: R -> reading, W -> writing, RW -> both reading & writing,
  6350.     A/NA -> reading without access time update
  6351.     Y = open succeeds, N = open fails with error code 05h
  6352.     C = open fails, INT 24 generated
  6353. SeeAlso: #01403,#01636
  6354. --------v-213D76-----------------------------
  6355. INT 21 - VIRUS - "GT-SPOOF" -INSTALLATION CHECK
  6356.     AX = 3D76h
  6357. Return: AX = 763Dh if resident
  6358. SeeAlso: AX=357Fh,AX=3DFFh
  6359. --------v-213DFF-----------------------------
  6360. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  6361.     AX = 3DFFh
  6362. Return: AX = 4A44h if resident
  6363. SeeAlso: AX=3D76h,AX=4203h
  6364. --------D-213E-------------------------------
  6365. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  6366.     AH = 3Eh
  6367.     BX = file handle
  6368. Return: CF clear if successful
  6369.         AX destroyed
  6370.     CF set on error
  6371.         AX = error code (06h) (see #01680 at AH=59h/BX=0000h)
  6372. Notes:    if the file was written to, any pending disk writes are performed, the
  6373.       time and date stamps are set to the current time, and the directory
  6374.       entry is updated
  6375.     recent versions of DOS preserve AH because some versions of Multiplan
  6376.       had a bug which depended on AH being preserved
  6377. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  6378. --------D-213F-------------------------------
  6379. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  6380.     AH = 3Fh
  6381.     BX = file handle
  6382.     CX = number of bytes to read
  6383.     DS:DX -> buffer for data
  6384. Return: CF clear if successful
  6385.         AX = number of bytes actually read (0 if at EOF before call)
  6386.     CF set on error
  6387.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6388. Notes:    data is read beginning at current file position, and the file position
  6389.       is updated after a successful read
  6390.     the returned AX may be smaller than the request in CX if a partial
  6391.       read occurred
  6392.     if reading from CON, read stops at first CR
  6393.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6394. BUG:    Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to
  6395.       a record lock (see AH=5Ch), though it does return AX=0005h; this
  6396.       has been documented by Novell
  6397. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  6398. --------G-213F-------------------------------
  6399. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  6400.     AH = 3Fh
  6401.     BX = handle for character device "TDHDEBUG"
  6402.     CX = number of bytes to read
  6403.     DS:DX -> buffer for status block (see #01406)
  6404. Return: CF clear if successful
  6405.         AX = number of bytes actually read
  6406.     CF set on error
  6407.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6408. SeeAlso: AH=40h"Turbo Debug"
  6409.  
  6410. (Table 01405)
  6411. Values for status of Turbo Debugger command:
  6412.  00h    successful
  6413.  01h    invalid handle
  6414.  02h    no more breakpoints available
  6415.  03h    hardware does not support specified breakpoint type
  6416.  04h    previous command prevents execution
  6417.  05h    debugger hardware not found
  6418.  06h    hardware failure
  6419.  07h    invalid command
  6420.  08h    driver not initialized yet
  6421.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  6422.  
  6423. Format of Turbo Debugger status block:
  6424. Offset    Size    Description    (Table 01406)
  6425.  00h    BYTE    status of command (see #01405)
  6426. ---status for command 01h---
  6427.  01h    WORD    device driver interface version number (currently 1)
  6428.  03h    WORD    device driver software version
  6429.  05h    BYTE    maximum simultaneous hardware breakpoints
  6430.  06h    BYTE    configuration bits (see #01407)
  6431.  07h    BYTE    supported breakpoint types (see #01408)
  6432.  08h    WORD    supported addressing match modes (see #01409)
  6433.  0Ah    WORD    supported data matches (see #01410)
  6434.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  6435.  0Dh    WORD    size of onboard memory (in KB)
  6436.  0Fh    WORD    maximum number of trace-back events
  6437.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  6438.           supported)
  6439. ---status for command 04h---
  6440.  01h    BYTE    handle to use when referring to the just-set breakpoint
  6441.  
  6442. Bitfields for Turbo Debugger configuration bits:
  6443. Bit(s)    Description    (Table 01407)
  6444.  0    CPU and DMA accesses are distinct
  6445.  1    can detect DMA transfers
  6446.  2    supports data mask
  6447.  3    hardware pass counter on breakpoints
  6448.  4    can match on data as well as addresses
  6449.  
  6450. Bitfields for Turbo Debugger supported breakpoint types:
  6451. Bit(s)    Description    (Table 01408)
  6452.  0    memory read
  6453.  1    memory write
  6454.  2    memory read/write
  6455.  3    I/O read
  6456.  4    I/O write
  6457.  5    I/O read/write
  6458.  6    instruction fetch
  6459.  
  6460. Bitfields for Turbo Debugger supported addressing match modes:
  6461. Bit(s)    Description    (Table 01409)
  6462.  0    any address
  6463.  1    equal to test value
  6464.  2    not equal
  6465.  3    above test value
  6466.  4    below test value
  6467.  5    below or equal
  6468.  6    above or equal
  6469.  7    within range
  6470.  8    outside range
  6471.  
  6472. Bitfields for Turbo Debugger supported data matches:
  6473. Bit(s)    Description    (Table 01410)
  6474.  0    any data
  6475.  1    equal to test value
  6476.  2    not equal
  6477.  3    above test value
  6478.  4    below test value
  6479.  5    below or equal
  6480.  6    above or equal
  6481.  7    within range
  6482.  8    outside range
  6483. --------N-213F-------------------------------
  6484. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  6485.     AH = 3Fh
  6486.     BX = handle for character device "$IPCUST"
  6487.     CX = number of bytes to read
  6488.     DS:DX -> buffer for configuration data (see #01411)
  6489. Return: CF clear if successful
  6490.         AX = number of bytes actually read
  6491.     CF set on error
  6492.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6493. Notes:    if less than the entire data is read or written, the next read/write
  6494.       continues where the previous one ended; IOCTL calls AX=4402h and
  6495.       AX=4403h both reset the location at which the next operation starts
  6496.       to zero
  6497.     the data pointer is also reset to zero if the previous read or write
  6498.       reached or exceeded the end of the data, when the current function
  6499.       is read and the previous was write, or vice versa
  6500.     v2.1+ uses a new configuration method, but allows the installation
  6501.       of IPCUST.SYS for backward compatibility with other software which
  6502.       must read the PC/TCP configuration
  6503. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  6504.  
  6505. Format of PC/TCP configuration data:
  6506. Offset    Size    Description    (Table 01411)
  6507.  00h 12 BYTEs    IPCUST.SYS device driver header (see #01646)
  6508.  12h    BYTE    ???
  6509.  13h    BYTE    ???
  6510.  14h    WORD    ???
  6511.  16h    BYTE    bit flags
  6512.         bit 0: send BS rather than DEL for BackSpace key
  6513.         bit 1: wrap long lines
  6514.  17h    BYTE    ???
  6515.  18h 64 BYTEs    ASCIZ hostname
  6516.  58h 64 BYTEs    ASCIZ domain name
  6517.         (fully qualified domain name is hostname.domain-name)
  6518.  98h 16 BYTEs    ASCIZ username
  6519.  A8h 64 BYTEs    ASCIZ full name
  6520.  E8h 64 BYTEs    ASCIZ office address
  6521. 128h 32 BYTEs    ASCIZ phone number
  6522. 148h    WORD    offset from GMT in minutes
  6523. 14Ah  4 BYTEs    ASCIZ timezone name
  6524. 14Eh    WORD    number of time servers
  6525. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  6526.     ???
  6527. 164h    WORD    number of old-style name servers
  6528. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  6529. 172h    WORD    number of domain name servers
  6530. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  6531. 180h    DWORD    (big-endian) IP address of default gateway
  6532. 184h    DWORD    (big-endian) IP address of log server
  6533. 188h    DWORD    (big-endian) IP address of cookie server
  6534. 18Ch    DWORD    (big-endian) IP address of lpr server
  6535. 190h    DWORD    (big-endian) IP address of imagen print server
  6536. 194h 54 BYTEs    ???
  6537. 1E8h    WORD    TCP default window size in bytes
  6538. 1EAh    WORD    TCP low window size
  6539. 1ECh 64 BYTEs    ASCIZ host tabel filename
  6540. 22Ch  2 BYTEs    ???
  6541. 22Eh 80 BYTEs    ASCIZ mail relay host name
  6542. 27Eh    BYTE    ???
  6543. 27Fh    BYTE    ??? bit flags
  6544. 280h 44 BYTEs    ???
  6545. 2ACh    WORD    ???
  6546. 2AEh 202 BYTEs    ???
  6547. --------N-213F-------------------------------
  6548. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  6549.     AH = 3Fh
  6550.     BX = file handle for device "NET$HLP$"
  6551.     CX = 0008h
  6552.     DS:DX -> buffer for entry point record (see #01485)
  6553. Return: CF clear if successful
  6554.         AX = number of bytes actually read (0 if at EOF before call)
  6555.     CF set on error
  6556.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6557. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  6558.       permits communication with PCs running Windows for Workgroups or
  6559.       LAN Manager
  6560. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  6561. --------N-213F-------------------------------
  6562. INT 21 - BW-TCP - GET DRIVER INFO
  6563.     AH = 3Fh
  6564.     BX = file handle for device "ETHDEV27"
  6565.     CX = 002Bh
  6566.     DS:DX -> buffer for driver info (see #01412)
  6567. Return: CF clear if successful
  6568.         AX = number of bytes actually read (0 if at EOF before call)
  6569.     CF set on error
  6570.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6571. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  6572. InstallCheck:    for the TCP/IP stack, test for the existence of the character
  6573.       device UDP-IP10
  6574. Note:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  6575.       making this call to retrieve the driver information; one should also
  6576.       call the private API interrupt with AH=15h
  6577. SeeAlso: INT 14/AH=56h,INT 62/AH=00h"ETHDEV",INT 63/AH=03h,INT 64/AH=01h
  6578. Index:    installation check;BW-TCP hardware driver
  6579. Index:    installation check;BW-TCP TCPIP.SYS
  6580.  
  6581. Format of BW-TCP driver info:
  6582. Offset    Size    Description    (Table 01412)
  6583.  00h    WORD    I/O base address
  6584.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  6585.  03h    BYTE    interrupt vector for private API
  6586.  04h    BYTE    IRQ used by board
  6587.  05h    WORD    size of data buffer
  6588.  07h    WORD    maximum transfer window
  6589.  09h    WORD    time zone
  6590.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  6591.  0Ch    DWORD    internet address
  6592.  10h    WORD    "value" ???
  6593.  12h    BYTE    subnet mask
  6594.  13h    WORD    "ether_pointer" ???
  6595.  15h    WORD    offset in device driver of log server records (see #01413)
  6596.  17h    WORD    offset in device driver of name server records (see #01413)
  6597.  19h    WORD    offset in device driver of print server records (see #01413)
  6598.  1Bh    WORD    offset in device driver of time server records (see #01413)
  6599.  1Dh    WORD    offset in device driver of gateway records (see #01413)
  6600.  1Fh    WORD    segment address of device driver
  6601.  21h    BYTE    transfer size
  6602.  22h  9 BYTEs    network adapter board name
  6603. ---11/21/91+ ---
  6604.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  6605.  24h    BYTE    ETHDEV revision
  6606.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  6607.  26h    BYTE    TCPIP revision
  6608.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  6609.  28h    BYTE    BWRPC revision
  6610.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  6611.  2Ah    BYTE    BWNFS revision
  6612.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  6613.  2Ch    BYTE    Telnet revision
  6614.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  6615.  2Eh    BYTE    NETBIOS revision
  6616. Note:    for each driver, if version=0, the driver is not installed or does
  6617.       not support the version check
  6618.  
  6619. Format of BW-TCP server records:
  6620. Offset    Size    Description    (Table 01413)
  6621.  00h    BYTE    number of server records following
  6622.  01h  N DWORDs    internet addresses of servers
  6623. --------y-213F-------------------------------
  6624. INT 21 - Trusted Access - NB.SYS - GET STATE
  6625.     AH = 3Fh
  6626.     BX = file handle for device "$$NB$$NB"
  6627.     CX = 0002h (size of state)
  6628.     DS:DX -> buffer for state record (see #01414)
  6629. Return: CF clear if successful
  6630.         AX = number of bytes actually read (0 if at EOF before call)
  6631.     CF set on error
  6632.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6633. Program: Trusted Access is a security and access-control package by Lassen
  6634.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  6635.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  6636. SeeAlso: AH=40h"NB.SYS",AX=4101h
  6637.  
  6638. Format of Trusted Access state record:
  6639. Offset    Size    Description    (Table 01414)
  6640.  00h    BYTE    00h off, 01h on
  6641.  01h    BYTE    keys being disabled
  6642.         bit 0: Ctrl-Break
  6643.         bit 1: SysReq
  6644.         bit 2: Ctrl and Alt
  6645.         bit 3: Ctrl-Alt-Del
  6646.         bit 7: all keys (overrides other bits)
  6647. ----------213F-------------------------------
  6648. INT 21 U - IFSHLP.SYS - GET ENTRY POINT
  6649.     AH = 3Fh
  6650.     BX = file handle for device "IFS$HLP$"
  6651.     CX = 0008h (size of buffer in bytes)
  6652.     DS:DX -> buffer for entry point record (see #01415)
  6653. Return: CF clear if successful
  6654.         AX = number of bytes actually read (0 if at EOF before call)
  6655.     CF set on error
  6656.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6657. Program: IFSHLP.SYS is a support driver for Microsoft Windows for Workgroups
  6658. SeeAlso: AX=4402h"IFSHLP"
  6659.  
  6660. Format of IFSHLP.SYS entry point record:
  6661. Offset    Size    Description    (Table 01415)
  6662.  00h  4 BYTEs    (call) required signature if called via IOCTL
  6663.             70h E9h 34h 37h for Windows 3.11
  6664.             70h E9h 35h 37h for Windows 3.11
  6665.         (ret) signature 34h 37h 70h EFh (Windows 3.11)
  6666.         (ret) signature 35h 37h 70h EFh (Windows95)
  6667.  04h    DWORD    (ret) pointer to FAR call entry point (see #01416)
  6668.  
  6669. (Table 01416)
  6670. Call IFSHLP.SYS entry point with:
  6671.     STACK:    WORD    function number (00h-0Ch)
  6672.             00h get ??? data
  6673.             01h set interrupt intercepts (trap)
  6674.             02h remove interrupt intercepts (untrap)
  6675.             03h ??? LPT2
  6676.             04h ??? LPT1
  6677.             05h revector INT 2F to trap and remove trap for others
  6678.             06h set ??? flag
  6679.             07h clear ??? flag
  6680.             08h get ??? flag word
  6681.             ---Windows 3.11 only---
  6682.             09h ???
  6683.             0Ah ???
  6684.             0Bh ???
  6685.             0Ch get ???
  6686. ---if function 00h---
  6687. Return: DX:AX -> ??? data (see #01417)
  6688.     BX destroyed
  6689. ---if function 01h---
  6690.     STACK:    DWORD    new intercept (trap) address
  6691. Return: AX = status
  6692.         0000h successful
  6693.         0001h failed (already set)
  6694.         DX = 0000h
  6695.     BX destroyed
  6696. Note:    the trap handler is called with a function number in BX, and the
  6697.       original BX on top of the stack; a null handler must perform a
  6698.       POP BX and an IRET
  6699. ---if function 02h---
  6700. Return: AX = status
  6701.         0000h successful
  6702.         0001h failed (not set)
  6703.     DX = 0000h
  6704.     BX destroyed
  6705. ---if function 03h,04h---
  6706.     STACK:    WORD    ???
  6707. Return: AX = 0000h
  6708.     DX = 0000h
  6709.     BX destroyed
  6710. ---if function 05h---
  6711.     ???
  6712. Return:    BX destroyed
  6713. ---if function 06h---
  6714. Return: AX = 0001h and DX = 0000h if already set
  6715.     AX,DX unchanged if successful
  6716.     BX destroyed
  6717. ---if function 07h---
  6718. Return: AX = 0001h and DX = 0000h if not set
  6719.     AX,DX unchanged if successful
  6720.     BX destroyed
  6721. ---if function 08h---
  6722. Return: DX = 0000h
  6723.     AX = flags
  6724.         bit 0: set/cleared by functions 06h and 07h
  6725.         bit 1: trap is currently set (refer to functions 01h/02h)
  6726.     BX destroyed
  6727. ---if function 09h---
  6728. Return: AX = status
  6729.         0000h successful
  6730.         0001h failed (already called)
  6731.     BX destroyed
  6732. ---if function 0Ah---
  6733.     STACK:    WORD    ???
  6734.     ???
  6735. Return:    BX destroyed
  6736. ---if function 0Bh---
  6737. Return: AX = status
  6738.         0000h successful
  6739.         0001h failed (not set)
  6740.     BX destroyed
  6741. ---if function 0Ch---
  6742. Return: AX = 0000h
  6743.     ES:BX -> ??? data
  6744. ---if function > 0Ch---
  6745. Return: AX = 0001h
  6746.     DX = 0000h
  6747.     BX destroyed
  6748.  
  6749. Format of IFSHLP ??? data:
  6750. Offset    Size    Description    (Table 01417)
  6751.  00h    DWORD    -> DOS Swappable Data Area (see #01687,#01689)
  6752.  02h    WORD    ??? offset in DOS data segment?
  6753.  04h    WORD    offset in DOS data segment of current-PSP WORD
  6754.  06h    WORD    ???
  6755.  08h    WORD    ???
  6756.  0Ah    WORD    ???
  6757.  0Ch    DWORD    -> DOS List of Lists (see #01627)
  6758.  10h    ???
  6759. SeeAlso: #01416
  6760. --------v-213F--BXFEB0-----------------------
  6761. INT 21 - VIRUS - "KYZ/LieWait" - INSTALLATION CHECK
  6762.     AH = 3Fh
  6763.     BX = FEB0h
  6764. Return: BX = 1212h if resident
  6765. SeeAlso: AX=3032h"VIRUS",AX=4BF1h"VIRUS"
  6766. --------D-2140-------------------------------
  6767. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  6768.     AH = 40h
  6769.     BX = file handle
  6770.     CX = number of bytes to write
  6771.     DS:DX -> data to write
  6772. Return: CF clear if successful
  6773.         AX = number of bytes actually written
  6774.     CF set on error
  6775.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6776. Notes:    if CX is zero, no data is written, and the file is truncated or
  6777.       extended to the current position
  6778.     data is written beginning at the current file position, and the file
  6779.       position is updated after a successful write
  6780.     for FAT32 drives, the file must have been opened with AX=6C00h with
  6781.       the "extended size" flag in order to expand the file beyond 2GB;
  6782.       otherwise the write will fail with error code 0005h (access denied)
  6783.     the usual cause for AX < CX on return is a full disk
  6784. BUG:    a write of zero bytes will appear to succeed when it actually failed
  6785.       if the write is extending the file and there is not enough disk
  6786.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  6787.       whether the file was in fact extended by seeking to 0 bytes from
  6788.       the end of the file (INT 21/AX=4202h/CX=0000h/DX=0000h)
  6789.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6790. SeeAlso: AH=28h,AH=3Fh"DOS",AH=93h,INT 2F/AX=1109h
  6791. --------G-2140-------------------------------
  6792. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  6793.     AH = 40h
  6794.     BX = handle for character device "TDHDEBUG"
  6795.     CX = number of bytes to write
  6796.     DS:DX -> hardware breakpoint command (see #01418)
  6797. Return: CF clear if successful
  6798.         AX = number of bytes actually written
  6799.     CF set on error
  6800.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6801. Note:    results are retrieved by reading from the device
  6802. SeeAlso: AH=3Fh"Turbo Debug"
  6803.  
  6804. Format of Turbo Debugger hardware breakpoint commands:
  6805. Offset    Size    Description    (Table 01418)
  6806.  00h    BYTE    command code
  6807.         00h install interrupt vectors
  6808.         01h get hardware capabilities
  6809.         02h enable hardware breakpoints
  6810.         03h disable hardware breakpoints
  6811.         04h set hardware breakpoint
  6812.         05h clear hardware breakpoint
  6813.         06h set I/O base address and reset hardware
  6814.         07h restore interrupt vectors
  6815. ---command code 00h---
  6816.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  6817.           hardware breakpoint; call with CPU state the same as on
  6818.           the breakpoint except for pushing AX and placing an entry
  6819.           code (FFh if breakout button or breakpoint handle) in AH
  6820. ---command code 04h---
  6821.  01h    BYTE    breakpoint type
  6822.         00h memory read
  6823.         01h memory write
  6824.         02h memory read/write
  6825.         03h I/O read
  6826.         04h I/O write
  6827.         05h I/O read/write
  6828.         06h instruction fetch
  6829.  02h    BYTE    address matching mode (see #01419)
  6830.  03h    DWORD    32-bit linear low address
  6831.  07h    DWORD    32-bit linear high address
  6832.  0Bh    WORD    pass count
  6833.  0Dh    BYTE    data size (01h, 02h, or 04h)
  6834.  0Eh    BYTE    source of matched bus cycle (01h CPU, 02h DMA, 03h either)
  6835.  0Fh    BYTE    data-matching mode (see #01419)
  6836.  10h    DWORD    low data value
  6837.  14h    DWORD    high data value
  6838.  18h    DWORD    data mask specifying which bits of the data are tested
  6839. ---command code 05h---
  6840.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  6841.           04h)
  6842. ---command code 06h---
  6843.  01h    WORD    base address of hardware debugger board
  6844.  
  6845. (Table 01419)
  6846. Values for Turbo Debugger address/data matching mode:
  6847.  00h    match any
  6848.  01h    equal to test value
  6849.  02h    different from test value
  6850.  03h    above test value
  6851.  04h    below test value
  6852.  05h    below or equal to test value
  6853.  06h    above or equal to test value
  6854.  07h    within inclusive range
  6855.  08h    outside specified range
  6856. --------N-2140-------------------------------
  6857. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  6858.     AH = 40h
  6859.     BX = handle for character device "$IPCUST"
  6860.     CX = number of bytes to write
  6861.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  6862. Return: CF clear if successful
  6863.         AX = number of bytes actually written
  6864.     CF set on error
  6865.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6866. Notes:    if less than the entire data is read or written, the next read/write
  6867.       continues where the previous one ended; IOCTL calls AX=4402h and
  6868.       AX=4403h both reset the location at which the next operation starts
  6869.       to zero
  6870.     the data pointer is also reset to zero if the previous read or write
  6871.       reached or exceeded the end of the data, when the current function
  6872.       is read and the previous was write, or vice versa
  6873.     v2.1+ uses a new configuration method, but allows the installation
  6874.       of IPCUST.SYS for backward compatibility with other software which
  6875.       must read the PC/TCP configuration
  6876. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  6877. --------y-2140-------------------------------
  6878. INT 21 U - Trusted Access - NB.SYS - SET STATE
  6879.     AH = 40h
  6880.     BX = handle for character device "$$NB$$NB"
  6881.     DS:DX -> state record (see #01414)
  6882.     CX ignored
  6883. Return: CF clear if successful
  6884.         AX = number of bytes actually written
  6885.     CF set on error
  6886.         AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
  6887. Program: Trusted Access is a security and access-control package by Lassen
  6888.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  6889.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  6890. SeeAlso: AH=3Fh"NB.SYS"
  6891. --------j-214000BX0002-----------------------
  6892. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  6893.     AX = 4000h
  6894.     BX = 0002h
  6895.     CX = 0000h
  6896.     DS:DX = 0000h:0000h
  6897. Return: CF clear if installed
  6898.         AX = CS of resident code
  6899. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  6900.       noises when programs output a bell
  6901. SeeAlso: AX=4001h
  6902. --------j-214001BX0002-----------------------
  6903. INT 21 - FARTBELL.EXE - FORCE NOISE
  6904.     AX = 4001h
  6905.     BX = 0002h
  6906.     CX = 0000h
  6907.     DS:DX = 0000h:0000h
  6908. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  6909.       noises when programs output a bell
  6910. SeeAlso: AX=4000h
  6911. --------D-2141-------------------------------
  6912. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  6913.     AH = 41h
  6914.     DS:DX -> ASCIZ filename (no wildcards, but see notes)
  6915.     CL = attribute mask for deletion (server call only, see notes)
  6916. Return: CF clear if successful
  6917.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  6918.     CF set on error
  6919.         AX = error code (02h,03h,05h) (see #01680 at AH=59h/BX=0000h)
  6920. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  6921.       the filespec must be canonical (as returned by AH=60h), and only
  6922.       files matching the attribute mask in CL are deleted
  6923.     DR DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h; DR DOS
  6924.       3.41 crashes if called via AX=5D00h with wildcards
  6925.     DOS does not erase the file's data; it merely becomes inaccessible
  6926.       because the FAT chain for the file is cleared
  6927.     deleting a file which is currently open may lead to filesystem
  6928.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  6929.       referencing the deleted file, thus allowing writes to a nonexistant
  6930.       file.
  6931.     under DR DOS and DR Multiuser DOS, this function will fail if the file
  6932.       is currently open
  6933.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6934. BUG:    DR DOS 3.41 crashes if called via AX=5D00h
  6935. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AX=7141h,AX=F244h
  6936. SeeAlso: INT 2F/AX=1113h
  6937. --------y-214101DXFFFE-----------------------
  6938. INT 21 - SoftLogic Data Guardian - ???
  6939.     AX = 4101h
  6940.     DX = FFFEh
  6941. Return: AX = 0000h if installed
  6942. Note:    resident code sets several internal variables on this call
  6943. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  6944. --------D-2142-------------------------------
  6945. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  6946.     AH = 42h
  6947.     AL = origin of move
  6948.         00h start of file
  6949.         01h current file position
  6950.         02h end of file
  6951.     BX = file handle
  6952.     CX:DX = (signed) offset from origin of new file position
  6953. Return: CF clear if successful
  6954.         DX:AX = new file position in bytes from start of file
  6955.     CF set on error
  6956.         AX = error code (01h,06h) (see #01680 at AH=59h/BX=0000h)
  6957. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  6958.       start of the file; no error is returned in that case (except under
  6959.       Windows NT), but subsequent attempts at I/O will produce errors
  6960.     if the new position is beyond the current end of file, the file will
  6961.       be extended by the next write (see AH=40h); for FAT32 drives, the
  6962.       file must have been opened with AX=6C00h with the "extended size"
  6963.       flag in order to expand the file beyond 2GB
  6964. BUG:    using this method to grow a file from zero bytes to a very large size
  6965.       can corrupt the FAT in some versions of DOS; the file should first
  6966.       be grown from zero to one byte and then to the desired large size
  6967. SeeAlso: AH=24h,INT 2F/AX=1228h
  6968. --------v-214203-----------------------------
  6969. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  6970.     AX = 4203h
  6971. Return: AX = 1234h if resident
  6972. SeeAlso: AX=3DFFh,AX=4243h
  6973. --------v-214243-----------------------------
  6974. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  6975.     AX = 4243h
  6976. Return: AX = 5678h if resident
  6977. SeeAlso: AX=4203h,AX=44A0h,AX=4B04h
  6978. --------D-214300-----------------------------
  6979. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  6980.     AX = 4300h
  6981.     DS:DX -> ASCIZ filename
  6982. Return: CF clear if successful
  6983.         CX = file attributes (see #01420)
  6984.         AX = CX (DR DOS 5.0)
  6985.     CF set on error
  6986.         AX = error code (01h,02h,03h,05h) (see #01680 at AH=59h)
  6987. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  6988.     under DR DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  6989.       simply ignored without an error
  6990. BUG:    Windows for Workgroups returns error code 05h (access denied) instead
  6991.       of error code 02h (file not found) when attempting to get the
  6992.       attributes of a nonexistent file.  This causes open() with O_CREAT
  6993.       and fopen() with the "w" mode to fail in Borland C++.
  6994. SeeAlso: AX=4301h,AX=4310h,AX=7143h,AH=B6h,INT 2F/AX=110Fh,INT 60/DI=0517h
  6995. --------D-214301-----------------------------
  6996. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  6997.     AX = 4301h
  6998.     CX = new file attributes (see #01420)
  6999.     DS:DX -> ASCIZ filename
  7000. Return: CF clear if successful
  7001.         AX destroyed
  7002.     CF set on error
  7003.         AX = error code (01h,02h,03h,05h) (see #01680 at AH=59h)
  7004. Notes:    will not change volume label or directory attribute bits, but will
  7005.       change the other attribute bits of a directory (the directory
  7006.       bit must be cleared to successfully change the other attributes of a
  7007.       directory, but the directory will not be changed to a normal file as
  7008.       a result)
  7009.     MS-DOS 4.01 reportedly closes the file if it is currently open
  7010.     for security reasons, the Novell NetWare execute-only bit can never
  7011.       be cleared; the file must be deleted and recreated
  7012.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  7013.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  7014.       compatibility mode, otherwise a sharing violation critical error is
  7015.       generated if the file is currently open
  7016.     DR DOS 3.41/5.0 will silently ignore attempts to change the 'directory'
  7017.       attribute bit
  7018. SeeAlso: AX=4300h,AX=4311h,AX=7143h,INT 2F/AX=110Eh
  7019.  
  7020. Bitfields for file attributes:
  7021. Bit(s)    Description    (Table 01420)
  7022.  7    shareable (Novell NetWare)
  7023.  7    pending deleted files (Novell DOS, OpenDOS)
  7024.  6    unused
  7025.  5    archive
  7026.  4    directory
  7027.  3    volume label
  7028.     execute-only (Novell NetWare)
  7029.  2    system
  7030.  1    hidden
  7031.  0    read-only
  7032. --------D-214302-----------------------------
  7033. INT 21 - MS-DOS 7 - GET COMPRESSED FILE SIZE
  7034.     AX = 4302h
  7035.     DS:DX -> ASCIZ pathname for file or directory
  7036. Return: CF clear if successful
  7037.         ??? = compressed size of file/directory in bytes
  7038.     CF set on error
  7039.         AX = error code
  7040. Note:    on volumes which do not support compression, the returned size is the
  7041.       actual file size rounded up to the next cluster boundary
  7042. SeeAlso: AH=71h,AH=72h
  7043. --------O-214302-----------------------------
  7044. INT 21 - DR DOS 3.41+ internal - GET ACCESS RIGHTS
  7045.     AX = 4302h
  7046.     DS:DX -> ASCIZ pathname
  7047. Return: CF clear if successful
  7048.         CX = access rights (see #01421)
  7049.         AX = CX (DR DOS 5.0)
  7050.     CF set on error
  7051.         AX = error code
  7052. Desc:    Determine which operations the calling program may perform on a
  7053.       specified file without being required to provide a password.
  7054. Notes:    this protection scheme has been coordinated on all current Digital
  7055.       Research/Novell operating systems (DR DOS 3.41+, DRMDOS 5.x, and
  7056.       FlexOS 2+)
  7057.     this function is documented in DR DOS 6.0 and corresponds to the
  7058.       "Get/Set File Attributes" function, subfunction 2, documented in
  7059.       Concurrent DOS.
  7060.     only FlexOS actually uses the "execution" bits; DR DOS 3.41+ treats
  7061.       them as "read" bits.
  7062.     DR DOS 3.41-5.x only use bits 0-3.  Only DR DOS 6.0 using a
  7063.       DRMDOS 5.x security system allowing for users and groups uses bits
  7064.       4-11.
  7065. SeeAlso: AX=4303h,#01354 at INT 21/AH=11h
  7066.  
  7067. Bitfields for DR DOS file access rights:
  7068. Bit(s)    Description    (Table 01421)
  7069.  0    owner delete requires password
  7070.  1    owner execution requires password (FlexOS)
  7071.  2    owner write requires password
  7072.  3    owner read requires password
  7073.  4    group delete requires password
  7074.  5    group execution requires password (FlexOS)
  7075.  6    group write requires password
  7076.  7    group read requires password
  7077.  8    world delete requires password
  7078.  9    world execution requires password (FlexOS)
  7079.  10    world write requires password
  7080.  11    world read requires password
  7081. --------O-214303-----------------------------
  7082. INT 21 - DR DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  7083.     AX = 4303h
  7084.     CX = access rights
  7085.          bits 11-0: access rights (see #01421)
  7086.          bit 15: new password is to be set
  7087.     DS:DX -> ASCIZ pathname
  7088.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  7089. Return: CF clear if successful
  7090.     CF set on error
  7091.         AX = error code
  7092. Notes:    if the file is already protected, the old password must be added after
  7093.       the pathname, separated by a ";".  As with all password handling in
  7094.       DR DOS, the old password is processed by the kernel, not any
  7095.       applications or utilities making the call.
  7096.     this function is documented in DR DOS 6.0 and corresponds to the
  7097.       "Get/Set File Attributes" function, subfunction 3, documented in
  7098.       Concurrent DOS.
  7099. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR DOS",AX=4305h,AX=4454h
  7100. --------O-214304-----------------------------
  7101. INT 21 U - DR DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  7102.     AX = 4304h
  7103.     DS:DX -> ASCIZ filename
  7104.     ???
  7105. Return: CF clear if successful
  7106.         CX = AX = 0000h if no password assigned to file
  7107.     CF set on error
  7108.         AX = error code (see #01680 at AH=59h/BX=0000h)
  7109. Note:    this function is only supported by DR DOS 5.0 and 6.0 and DRMDOS 5.1
  7110. SeeAlso: AX=4303h,AX=4305h
  7111. --------O-214305-----------------------------
  7112. INT 21 U - DR DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  7113.     AX = 4305h
  7114.     DS:DX -> ASCIZ filename
  7115.     ???
  7116. Return: CF clear if successful
  7117.     CF set on error
  7118.         AX = error code (see #01680 at AH=59h/BX=0000h)
  7119. Desc:    this function allows the extended attributes, and optionally the
  7120.       encrypted password, of a file to be set.
  7121. Note:    this function is only supported by DR DOS 5.0 and 6.0 and DRMDOS 5.1
  7122. SeeAlso: AX=4304h,AX=4311h
  7123. --------O-214306-----------------------------
  7124. INT 21 O - DR DOS 6.0 - GET FILE OWNER
  7125.     AX = 4306h
  7126.     DS:DX -> ASCIZ filename
  7127. Return: CF clear if successful
  7128.         AX = CX = value set with AX=4307h
  7129.     CF set on error
  7130.         AX = error code (see #01680 at AH=59h/BX=0000h)
  7131. Note:    no longer supported by Novell DOS 7 / OpenDOS
  7132. SeeAlso: AX=4307h
  7133. --------O-214307-----------------------------
  7134. INT 21 O - DR DOS 6.0 - SET FILE OWNER
  7135.     AX = 4307h
  7136.     CX = ??? (owner identification number?)
  7137.     DS:DX -> ASCIZ filename
  7138. Return: CF clear if successful
  7139.     CF set on error
  7140.         AX = error code (see #01680 at AH=59h/BX=0000h)
  7141. Note:    no longer supported by Novell DOS 7 / OpenDOS
  7142. SeeAlso: AX=4306h
  7143. --------N-214310-----------------------------
  7144. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  7145.     AX = 4310h
  7146.     DS:DX -> ASCIZ filename
  7147. Return: CF clear if successful
  7148.         CH = attributes (see #01422)
  7149.     CF set on error
  7150.         AX = error code (01h,02h,03h,05h) (see #01680 at AH=59h/BX=0000h)
  7151. Note:    the filename may be a directory but must be on a VINES file service
  7152. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  7153. --------N-214311-----------------------------
  7154. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  7155.     AX = 4311h
  7156.     CH = new attributes (see #01422)
  7157.     DS:DX -> ASCIZ filename
  7158. Return: CF clear if successful
  7159.     CF set on error
  7160.         AX = error code (01h,02h,03h,05h) (see #01680 at AH=59h/BX=0000h)
  7161. Note:    the filename may be a directory but must be on a VINES file service
  7162. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  7163.  
  7164. Bitfields for VINES extended file attributes:
  7165. Bit(s)    Description    (Table 01422)
  7166.  7    unused
  7167.  6    shareable
  7168.  5    execute-only
  7169.  4-0    unused
  7170. --------u-214321BX0000-----------------------
  7171. INT 21 - Q87, Q387 - INSTALLATION CHECK
  7172.     AX = 4321h
  7173.     BX = 0000h
  7174.     EAX = 87654321h (entire EAX value is required, not just AX)
  7175. Return: EAX = 12345678h if installed
  7176. Program: Q387 (renamed to Q87 as of v3.7) is a math coprocessor emulator from
  7177.       Quickware
  7178. Note:    this function is available only in virtual-86 mode in older versions;
  7179.       newer versions also provide it in MS Windows 16- and 32-bit protected
  7180.       mode
  7181. SeeAlso: AX=4321h/BX=0001h,AX=4321h/BX=0002h,INT 67/AX=4321h
  7182. --------u-214321BX0001-----------------------
  7183. INT 21 - Q87, Q387 - ENABLE EMULATOR
  7184.     AX = 4321h
  7185.     BX = 0001h
  7186.     EAX = 87654321h (entire EAX value is required, not just AX)
  7187. Desc:    enable the emulator by setting the CPU MSW's EM bit and updating
  7188.       the BIOS equipment list
  7189. Note:    this function is available only in virtual-86 mode in older versions;
  7190.       newer versions also provide it in MS Windows 16- and 32-bit protected
  7191.       mode
  7192. SeeAlso: AX=4321h/BX=0000h,AX=4321h/BX=0002h
  7193. --------u-214321BX0002-----------------------
  7194. INT 21 - Q87, Q387 - DISABLE EMULATOR
  7195.     AX = 4321h
  7196.     BX = 0002h
  7197.     EAX = 87654321h (entire EAX value is required, not just AX)
  7198. Desc:    disable the emulator by clearing the CPU MSW's EM bit and updating
  7199.       the BIOS equipment list
  7200. Note:    this function is available only in virtual-86 mode in older versions;
  7201.       newer versions also provide it in MS Windows 16- and 32-bit protected
  7202.       mode
  7203. SeeAlso: AX=4321h/BX=0000h,AX=4321h/BX=0001h
  7204. --------O-214380-----------------------------
  7205. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  7206.     AX = 4380h
  7207.     ???
  7208. Return: ???
  7209. SeeAlso: AH=41h,AX=4381h
  7210. --------O-214381-----------------------------
  7211. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  7212.     AX = 4381h
  7213.     ???
  7214. Return: ???
  7215. SeeAlso: AH=41h,AX=4380h
  7216. --------D-2143FFBP5053-----------------------
  7217. INT 21 - MS-DOS 7.20 (Win98) - EXTENDED-LENGTH FILENAME OPERATIONS
  7218.     AX = 43FFh
  7219.     BP = 5053h ('PS')
  7220.     CL = function
  7221.         39h "mkdir" create directory
  7222.         DS:DX -> ASCIZ pathname
  7223.         56h rename file
  7224.         DS:DX -> ASCIZ filename of existing file (no wildcards)
  7225.         ES:DI -> ASCIZ new filename (no wildcards)
  7226. Return: CF clear if successful
  7227.         AX destroyed
  7228.     CF set on error
  7229.         AX = error code (03h,05h) (see #01680 at AH=59h/BX=0000h)
  7230. Note:    these functions are equivalent to INT 21/AH=39h and INT 21/AH=56h,
  7231.       but with a maximum path length of 128 characters instead of 67;
  7232.       unlike INT 21/AX=71xxh, these functions are available under bare
  7233.       DOS and not just in a Windows DOS box
  7234. SeeAlso: AH=39h,AH=56h,AX=7139h,AX=7156h
  7235. --------!---Section--------------------------
  7236.